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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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,我有一个正则表达式和一个字符串,其中包含一些与这个正则表达式匹配的内容。我的正则表达式处理所有这些匹配,就像它只是一个大匹配一样(当然我不希望出现这种行为),让我给你举个例子: 我的测试字符串(很抱歉涂鸦,但这无关紧要): 我的正则表达式在js代码中: view.replace(/(\-(.+)\-)/g, '<span style="background-color:yellow">$1</span>'); view.replace(/(\-(.+)\-)/g,$1'

我有一个正则表达式和一个字符串,其中包含一些与这个正则表达式匹配的内容。我的正则表达式处理所有这些匹配,就像它只是一个大匹配一样(当然我不希望出现这种行为),让我给你举个例子:

我的测试字符串(很抱歉涂鸦,但这无关紧要):

我的正则表达式在js代码中:

view.replace(/(\-(.+)\-)/g, '<span style="background-color:yellow">$1</span>');
view.replace(/(\-(.+)\-)/g,$1');
我的结果是:

sdfsd<span style="background-color:yellow">-dsf- sdfsdfssdfsfdsfsd -sdfsdf-</span>
sdfsd dsf-SDFSDFSDFSFDSFSD-sdfsdf-
正如您所看到的,“-”中的每个字符串都必须包含在span中,但只有一个span。我怎样才能解决这个问题?(老实说,我不想更改我的(++)regex部分,我认为这可能是个问题,但如果没有其他方法,请告诉我)

换句话说,结果必须是:

sdfsd<span style="background-color:yellow">-dsf-</span> sdfsdfssdfsfdsfsd <span style="background-color:yellow">-sdfsdf-</span>
sdfsd dsf-SDFSDFSDFSFDSFSD-sdfsdf-
请随时在评论中询问我,谢谢您的帮助。

您可以尝试:

view.replace(/-([^-]+)-/g, '<span style="background-color:yellow">$1</span>');
view.replace(/-([^-]+)-/g,$1');
您可以尝试:

view.replace(/-([^-]+)-/g, '<span style="background-color:yellow">$1</span>');
view.replace(/-([^-]+)-/g,$1');
老实说,我不想更改我的(++)regex部分,我认为这可能是个问题

为什么不呢,这实际上是问题的根源,您可以尝试使用以下正则表达式:

/(\-([^-]+)\-)/g
如果您认为破折号
-
可以出现在
-
-
之间,则可以使用效率较低的破折号:

/(\-(.+?)\-)/g
+?
会导致一个,或者换句话说,在匹配了首字母
-
之后,
+?
匹配了一个字符,然后它将控件移动到下面的
-
尝试匹配破折号,如果它不能匹配,则
+?
读取(消耗)输入的另一个字符,依此类推,直到以下
-
能够匹配为止

老实说,我不想更改我的(++)regex部分,我认为这可能是个问题

为什么不呢,这实际上是问题的根源,您可以尝试使用以下正则表达式:

/(\-([^-]+)\-)/g
如果您认为破折号
-
可以出现在
-
-
之间,则可以使用效率较低的破折号:

/(\-(.+?)\-)/g

+?
会导致一个,或者换句话说,在匹配了首字母
-
之后,
+?
匹配了一个字符,然后它将控件移动到下面的
-
尝试匹配破折号,如果它不能匹配,则
+?
读取(消耗)输入中的另一个字符,依此类推,直到下面的
-
能够匹配。

我注意到您不想更改(+++),但这似乎是最简单的:(.+)->(.+?)@kasitan谢谢您的评论,这是一种最简单的方式,我注意到您不想更改(+),但这似乎是最简单的:(.+)->(.+?)@kasitan谢谢你的评论,这是一种最简单的方法。你能解释一下这个结构的意思吗<代码>(.+?)我选择第二个,因为它对我来说更容易理解,而且在这项任务中效率不是优先考虑的。这对我来说是一个很好的教训:不要懒惰使用正则表达式,最好使用lazy match:D。非常感谢。@flinth欢迎你,尽管我必须*强调,如果两个正则表达式之间没有
-
的话,第一个正则表达式会更好。你能解释一下这个结构的含义吗<代码>(.+?)我选择第二个,因为它对我来说更容易理解,而且在这项任务中效率不是优先考虑的。这对我来说是一个很好的教训:不要懒惰使用正则表达式,最好使用lazy match:D。非常感谢。@flinth不客气,不过我必须*强调,如果两个正则表达式之间没有
-
的话,第一个正则表达式会更好。