Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript正则表达式以匹配单引号、双引号和正则表达式斜杠之间的任何内容_Javascript_Regex - Fatal编程技术网

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

javascript正则表达式以匹配单引号、双引号和正则表达式斜杠之间的任何内容,javascript,regex,Javascript,Regex,我试图匹配双引号、单引号或正则表达式斜杠之间的任何内容,基本上是javascript没有标记为字符串或正则表达式的任何内容。到目前为止,我想到的是: /"[^\\"\n]*(\\"[^\\"\n]*)*"|'[^\\'\n]*(\\'[^\\'\n]*)*'|\/[^\\\/\n]*(\\\/[^\\\/\n]*)*\// 但正如你所看到的,这有几个问题 基本上这不应该匹配1+2/3+4/5,因为它不是正则表达式。也 not match“match here\\“not match”应该匹配第

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

/"[^\\"\n]*(\\"[^\\"\n]*)*"|'[^\\'\n]*(\\'[^\\'\n]*)*'|\/[^\\\/\n]*(\\\/[^\\\/\n]*)*\//
但正如你所看到的,这有几个问题

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

这应该怎么写


编辑:如果无法使用正则表达式区分
1+2/3+4/5
/*comment*/
/regex/
,我将如何解决
notmatch“match here\\\“notmatch”

匹配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构造。有关完整而准确的实现,请参阅。

刚刚找到了答案。我非常接近。以下是解决方案:

/"[^\\"\n]*(\\["\\][^\\"\n]*)*"|'[^\\'\n]*(\\['\\][^\\'\n]*)*'|\/[^\\\/\n]*(\\[\/\\][^\\\/\n]*)*\//
它与thg435答案非常相似,但我认为它的性能更高一点,因为它不会回溯太多


我缺少的是在寻找转义引号时,我也应该寻找转义反斜杠,所以我将
\\\“
更改为
\\[”\\]
与thg435的答案相反,thg435的答案在反斜杠后面看任何东西,反斜杠虽然有效,但可以在正则表达式中使用更多的状态

你不能区分
1+2/3+4/5
/*注释*/
/regex/
,你需要一个合适的解析器。@thg435注意,请参阅editIt要将JavaScript字符串文字与JavaScript的RegExp匹配,请参见此处:(我根据规范编写,因此保证不会过度接受或拒绝)。保证匹配有效的JS字符串,但不能保证正确匹配任意JS源代码中的所有JS字符串(例如,注释中类似字符串的序列).空格是怎么回事?
“\x4”
在JS中不是有效的字符串。速度稍微提高
(\\.\124;[^”])
([^”]\\)
@MosheK:不!
[^”]
将使用斜杠,使转义不被解析。@nhatdh:我在答案中添加了一条注释。我的意思是给OP一个想法,而不是一个完整的解决方案。