2014-10-11 74 views
1

寻找在空格上拆分短语,除非有可能的缩写词。例如:将空白分割为空白字符,除了首字母缩写词

“弗兰克在IBM工作永远” - >弗兰克,曾在,IBM,永远

另一种选择是 “嘎吱” 的缩写 - > “弗兰克在IBM工作永远”

+0

这些首字母缩写词总是用大写字母吗? – hwnd 2014-10-11 01:15:45

+0

@hwnd可能不是。 thx – 2014-10-11 01:46:31

+0

为什么缩写词中间有空格? – theliberalsurfer 2014-10-11 01:56:06

回答

2

使用的split的功能,它允许您通过将分裂元素放置在捕获组中来保留分裂元素,并且除了空格之外还创建缩略词分裂元素。

var separator = /\s+|\b([A-Z\s]*[A-Z])\b/; 

这会在结果中放入一些未定义的内容,因此您需要将它们滤除。

function split(str) { return str.split(separator).filter(Boolean); } 

split("Frank worked at I B M forever") 
> ["Frank", "worked", "at", "I B M", "forever"] 

从首字母缩写词的字母之间删除空格:这个正则表达式的

function squish(str) { return str.replace(/\s/g, ''); } 
function split(str) { return str.split(separator).filter(Boolean).map(squish); } 

split("Frank worked at I B M forever") 
> ["Frank", "worked", "at", "IBM", "forever"] 

人类可读的版本:

Split on 
    white space 
    OR 
    Between words, capturing as a group 
     optional capital letters or whitespace 
     followed by a capital letter 

欲了解更多有关的split此功能,请https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

如果separator是一个正则表达式,它包含捕获圆括号,则每次匹配separator时,捕获括号的结果(包括任何未定义的结果)被拼接到输出数组中。

1

为了您的具体的例子,\b([A-Z]) (?=[A-Z]\b)似乎运作良好:

s = "Frank worked at I B M forever" 
 
p = s.replace(/\b([A-Z]) (?=[A-Z]\b)/g, "$1") 
 
document.write(p)

0

为第一个请求,使用这种模式((?:[A-Z])+)|注意,在最后
白色空间和$1,
替代然后通过更换\s?,\s?W¯¯修剪多余的空格/ ,
Demo

+0

在“I”之前和“M”之后留下不需要的空格。 – 2014-10-11 10:29:55

+0

因此我的评论修剪上面的额外空间。 – 2014-10-11 15:01:37

+0

对不起,错过了。 – 2014-10-11 17:38:22