我如何编写使用regexp来分割字符串,如下所示:
"foo bar, foobar (bar)" => ["foo", "bar", ",", "foobar", "(", "bar", ")"]
即。在空格上拆分+每个特殊字符应单独包含在结果数组中
答案 0 :(得分:4)
而不是分裂,我会反过来;找到\w+|[^\w\s]
的所有匹配项。
答案 1 :(得分:3)
我可能会做这样的事情
var foo = [];
"foo bar, foobar (bar)".split(/(\W)/).forEach(function(elem) {
if (!/^\s*$/.test(elem)) {
foo.push(elem);
}
});
// foo = (object) ['foo', 'bar', ',', 'foobar', '(', 'bar', ')']
新阵列" foo"将包含您的所有值。
答案 2 :(得分:2)
您可以拆分以下正则表达式:
"\s|(?=\W)"
好吧,这个会给你以下输出:
["foo", "bar", ",", "foobar", "", "(bar", ")"]
由于Javascript 不支持后台,因此在此处不可能将(bar
拆分为两个单独的元素。
更好的方法是匹配而不是拆分。您只需要获得与以下正则表达式模式匹配的所有子字符串:
"\w+|[^\w\s]"
要将_
用作特殊字符,您可以使用:
"[^_\W]+|[^a-zA-Z0-9\s]"
答案 3 :(得分:2)
我根据http://rubular.com/r/BGAFLOmkgP
提出了(\w+|[,()])