繁体   English   中英

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

[英]javascript regex to match anything between single quotes, double quotes and regex slashes

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

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

但是与此相关的还有一些问题,您可以在这里看到

http://goo.gl/4Yn9pR

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

应该怎么写?

编辑:如果不可能使用正则表达式来区分1+2/3+4/5/*comment*//regex/ ,我该如何解决不Dont match "Match here\\\\" Dont match"问题

匹配类似c的转义字符串的技巧如下:

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

那是,

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

与单引号类似。 Python中的插图,因为JS正则表达式很丑陋:

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以获取完整而准确的实施方案。

只是想通了。 我离得很近。 解决方法如下:

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

DEMO

它与thg435答案非常相似,但我认为它的性能更高,因为它不会回退太多

我所缺少的是在寻找转义的引号时,我也应该也在寻找转义的反斜杠,所以我将\\\\"更改为\\\\["\\\\]而不是thg435的答案,后者会在反斜杠后查看任何内容虽然有效,但可以用完正则表达式引擎中的更多状态

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM