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 RegExp相同参数_Javascript_Regex - Fatal编程技术网

Javascript RegExp相同参数

Javascript RegExp相同参数,javascript,regex,Javascript,Regex,我正在尝试创建一个RegExp模式。Salt文本是这样的: Lorem --ipsum-- dolor !!ipsum!! sit amet Lorem --asdasd-- dolor !!asdasd!! sit amet 我想匹配--ipsum--dolor!!ipsum但不知道会发生什么事。我的意思是文本可能是这样的: Lorem --ipsum-- dolor !!ipsum!! sit amet Lorem --asdasd-- dolor !!asdasd!! sit ame

我正在尝试创建一个RegExp模式。Salt文本是这样的:

Lorem --ipsum-- dolor !!ipsum!! sit amet
Lorem --asdasd-- dolor !!asdasd!! sit amet
我想匹配
--ipsum--dolor!!ipsum
但不知道会发生什么事。我的意思是文本可能是这样的:

Lorem --ipsum-- dolor !!ipsum!! sit amet
Lorem --asdasd-- dolor !!asdasd!! sit amet
我可以将这两个文本与
/-.*.-.*.*?!!匹配/g
。对,我知道

但是当两个参数相同时,我希望它匹配。在示例中,regexp模式不应与以下文本中的任何内容匹配:

Lorem --ipsum-- dolor !!asdasd!! sit amet
Lorem --qweqwe-- dolor !!asdasd!! sit amet
Lorem --qweqwe-- dolor !!ipsum!! sit amet

如何实现这一点?

您可以使用反向引用,其中模式匹配先前捕获的子组:

/--(.*?)--.*?!!\1!!/

这里的
\1
表示“匹配第一个捕获组中捕获的内容”。第一个
*?
周围的括号使其成为一个捕获组。对于普通教育,如果您有多个捕获组,则可以使用\2、\3等来匹配除第一个组之外的其他组。

您可以将此正则表达式与捕获组和反向引用一起使用:

/--([^-]+)--\s+\S+\s+!!\1!!/

如果
dolor
是静态字符串,则使用以下正则表达式:

/--([^-]+)--\s+dolor\s+!!\1!!/
正则表达式详细信息:

  • --
    :匹配两个连字符
  • ([^-]+)
    :匹配并捕获任何非连字符的1+
  • --
    :匹配两个连字符
  • \s+
    :匹配1+个空格字符
  • \S+
    :匹配1+个非空白字符
  • \s+
    :匹配1+个空格字符
  • :匹配2个感叹词
  • \1
    :匹配与组#1相同的文本,即返回到捕获组#1的引用
  • :匹配2个感叹词