为什么这个javascript正则表达式字面不起作用?

时间:2014-01-16 05:09:40

标签: javascript regex regex-lookarounds

function fuzzQuery(rawQuery)
{
    re = /(?=[\(\) ])|(?<=[\(\) ])/;    

    strSplit = rawQuery.split(re);

    alert(strSplit);
};

不起作用(没有对话框)。

我检查http://rubular.com/处的表达式,它按预期工作。

re = /e/ 

确实有效。

输入字符串是

hello:(world one two three)

预期结果是:

hello:,(,world, ,one, ,two, ,three, )

我查看了以下SO问题:

Javascript simple regexp doesn't work

Why this javascript regex doesn't work?

Javascript regex not working

Javascript RegEx Not Working

但是我没有犯错,比如将表达式创建为字符串,或者当它是字符串时不会出现双重反斜杠。

2 个答案:

答案 0 :(得分:4)

正则表达式的主要问题是不支持 Lookbehind

re = /(?=[\(\) ])|(?<=[\(\) ])/
                   ^^^ A problem...

相反,您可以使用替代方法:

re       = /(?=[() ])|(?=[^\W])\b/;
strSplit = rawQuery.split(re);
console.log(strSplit);

// [ 'hello:', '(', 'world', ' ', 'one', ' ', 'two', ' ', 'three', ')' ]

答案 1 :(得分:0)

您可以使用以下内容:

re = /((?=\(\) ))|((?=[\(\) ]))./;    

    strSplit = rawQuery.split(re);

    console.log(strSplit);