正则表达式:匹配单词和特殊字符,除非引号

时间:2012-10-15 15:09:51

标签: javascript regex

我已经看过几乎几乎相同的其他问题了,通过一些自定义,我找到了一个适用于RegExr的解决方案。问题是它在Javascript中不起作用。

表达式:([^\s]*"[^"]+"[^\s]*)|[^"]?\w+[^"]?

测试字符串:+w1 @w2 (w3 (w4) @"w5 6"

预期结果:['+w1', '@w2', '(w3', '(w4)', '@"w5 w6"']

Javascript代码:console.log(/([^\s]*"[^"]+"[^\s]*)|[^"]?\w+[^"]?/g.exec(test_str));

Javascript结果:["+w1 ", undefined](在FF15和Chrome 22中测试)

我查找了MDN上的文档,但没有其他相关标志而不是全局标志。只是为了尝试我添加了多行和不区分大小写的标志,但它们没用。

任何想法是什么让它在Javascript中打破,而它似乎在RegExr中工作? (并且不是Flash的'ActionScript也是ECMAScript,所以RegExr不应该使用相同的正则表达式引擎吗?)在RegExr中,唯一启用的标志是全局标志。

修改:另一个问题是"w1 \"w2\" w3"将匹配为两个单词,而应该是一个单词。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试:

console.log('+w1 @w2 (w3 (w4) @"w5 6"'.match(/[^"\s]+(?:".*"\S*)?/g));