javascript正则表达式匹配单引号,双引号和正则表达式斜杠之间的任何内容

时间:2014-01-15 19:37:06

标签: javascript regex

我正在尝试匹配双引号,单引号或正则表达式斜杠之间的任何内容,基本上任何未被javascript标记为字符串或正则表达式的内容。到目前为止,我想出的是:

/"[^\\"\n]*(\\"[^\\"\n]*)*"|'[^\\'\n]*(\\'[^\\'\n]*)*'|\/[^\\\/\n]*(\\\/[^\\\/\n]*)*\//

但是有一些问题,你可以看到here

http://goo.gl/4Yn9pR

基本上这不应该与1+2/3+4/5匹配,因为它不是正则表达式。此外
Dont match "Match here\\" Dont match"应匹配第一部分而不是第二部分(对于单引号和正则表达式也是如此)

应该怎么写?

修改:如果使用正则表达式无法区分1+2/3+4/5/*comment*//regex/,我将如何解决Dont match "Match here\\" Dont match"问题

2 个答案:

答案 0 :(得分:0)

匹配c-like类型转义字符串的技巧是这样的:

" (\\. | [^"]) * "

即,

 - quote
 - repeat (
    - one escaped char
    - or not a quote
   )
  - quote

与单引号相似。自JS正则表达式丑陋以来python中的插图:

import re

test = r"""
    foo "bar" and "bar\"bar" and "bar\\bar" and "bar \\"
    foo 'bar' and 'bar\'bar' and 'bar\\bar' and 'bar \\'
"""

rr = r"""(?x)
    " (\\. | [^"]) * "
    |
    ' (\\. | [^']) * '
"""

print re.sub(rr, '@@', test)

> foo @@ and @@ and @@ and @@
> foo @@ and @@ and @@ and @@

可能需要向[^"]组添加换行符。

请注意,此表达式非常宽容,并允许许多无效的javascript构造。有关完整而准确的实施,请参阅https://stackoverflow.com/a/13800082/989121

答案 1 :(得分:0)

刚想通了。我很亲密。这是解决方案:

/"[^\\"\n]*(\\["\\][^\\"\n]*)*"|'[^\\'\n]*(\\['\\][^\\'\n]*)*'|\/[^\\\/\n]*(\\[\/\\][^\\\/\n]*)*\//

DEMO

这与thg435的答案非常相似,但我认为它的表现要多一点,因为它没有那么多的回溯

我缺少的是在查找转义引用时,我本来也应该寻找转义反斜杠,所以我将\\"更改为\\["\\]而不是thg435的回答在反斜杠之后,有效时可以在正则表达式引擎中使用更多状态

相关问题