1

我已经查看了几乎相同的其他问题,并且通过一些定制,我找到了一个适用于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"它将被匹配为两个单词,而它应该是一个单词。有任何想法吗?

4

1 回答 1

1

尝试:

console.log('+w1 @w2 (w3 (w4) @"w5 6"'.match(/[^"\s]+(?:".*"\S*)?/g));
于 2012-10-15T15:25:05.480 回答