2

我将如何编写使用正则表达式来拆分字符串,如下所示:

"foo bar, foobar (bar)" => ["foo", "bar", ",", "foobar", "(", "bar", ")"]

即在空格上拆分+每个特殊字符应分别包含在结果数组中

4

4 回答 4

4

而不是分裂,我会做相反的事情;找到 的所有匹配项\w+|[^\w\s]

于 2013-07-20T17:03:02.393 回答
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”将包含您的所有值。

于 2013-07-20T17:03:42.150 回答
2

您可以拆分以下正则表达式:

"\s|(?=\W)"

好吧,这个会给你以下输出:

["foo", "bar", ",", "foobar", "", "(bar", ")"]

因为,Javascript不支持后视,所以这里不可能拆分(bar成两个单独的元素。

更好的方法是match而不是split。您想要的只是获取与以下正则表达式模式匹配的所有子字符串:

"\w+|[^\w\s]"

_用作特殊字符,您可以使用:

"[^_\W]+|[^a-zA-Z0-9\s]"
于 2013-07-20T16:56:50.083 回答
2

我想出了(\w+|[,()])每个http://rubular.com/r/BGAFLOmkgP

于 2013-07-20T17:02:32.450 回答