寻找在空格上拆分短语,除非有可能的缩写词。例如:将空白分割为空白字符,除了首字母缩写词
“弗兰克在IBM工作永远” - >弗兰克,曾在,IBM,永远
另一种选择是 “嘎吱” 的缩写 - > “弗兰克在IBM工作永远”
寻找在空格上拆分短语,除非有可能的缩写词。例如:将空白分割为空白字符,除了首字母缩写词
“弗兰克在IBM工作永远” - >弗兰克,曾在,IBM,永远
另一种选择是 “嘎吱” 的缩写 - > “弗兰克在IBM工作永远”
使用的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
时,捕获括号的结果(包括任何未定义的结果)被拼接到输出数组中。
为了您的具体的例子,\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)
为第一个请求,使用这种模式((?:[A-Z])+)|
注意,在最后
白色空间和$1,
替代然后通过更换\s?,\s?
W¯¯修剪多余的空格/ ,
Demo
在“I”之前和“M”之后留下不需要的空格。 – 2014-10-11 10:29:55
因此我的评论修剪上面的额外空间。 – 2014-10-11 15:01:37
对不起,错过了。 – 2014-10-11 17:38:22
这些首字母缩写词总是用大写字母吗? – hwnd 2014-10-11 01:15:45
@hwnd可能不是。 thx – 2014-10-11 01:46:31
为什么缩写词中间有空格? – theliberalsurfer 2014-10-11 01:56:06