正则表达式:在空格上分割一个字符串+每个要包含的特殊字符

时间:2013-07-20 16:50:15

标签: javascript regex

我如何编写使用regexp来分割字符串,如下所示:

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

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

4 个答案:

答案 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+|[,()])