希望在白色空间上分割短语,除非有可能的首字母缩略词。例如:
"弗兰克永远在I B M工作" - >弗兰克,在工作,我,B M,永远
另一个选择是"挤压"首字母缩略词 - > "弗兰克永远在IBM工作"
答案 0 :(得分: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 :(得分: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)
答案 2 :(得分:0)
对于第一个请求,请使用此模式((?:[A-Z] )+)|
注意末尾有一个空格
并替换为$1,
然后通过替换\s?,\s?
w / ,
来修剪额外的空格
Demo