[英]javascript regex to match anything between single quotes, double quotes and regex slashes
我正在尝试匹配双引号,单引号或正则表达式斜杠之间的任何内容,基本上是没有被javascript标记为字符串或正则表达式的任何内容。 到目前为止,我想到的是:
/"[^\\"\n]*(\\"[^\\"\n]*)*"|'[^\\'\n]*(\\'[^\\'\n]*)*'|\/[^\\\/\n]*(\\\/[^\\\/\n]*)*\//
但是与此相关的还有一些问题,您可以在这里看到
基本上,这不应该匹配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]*)*\//
它与thg435答案非常相似,但我认为它的性能更高,因为它不会回退太多
我所缺少的是在寻找转义的引号时,我也应该也在寻找转义的反斜杠,所以我将\\\\"
更改为\\\\["\\\\]
而不是thg435的答案,后者会在反斜杠后查看任何内容虽然有效,但可以用完正则表达式引擎中的更多状态
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.