Javascript 正则表达式处理多个匹配,比如一个,如何修复?
我有一个正则表达式和一个字符串,其中包含一些与这个正则表达式匹配的内容。我的正则表达式处理所有这些匹配,就像它只是一个大匹配一样(当然我不希望出现这种行为),让我给你举个例子: 我的测试字符串(很抱歉涂鸦,但这无关紧要): 我的正则表达式在js代码中:Javascript 正则表达式处理多个匹配,比如一个,如何修复?,javascript,regex,Javascript,Regex,我有一个正则表达式和一个字符串,其中包含一些与这个正则表达式匹配的内容。我的正则表达式处理所有这些匹配,就像它只是一个大匹配一样(当然我不希望出现这种行为),让我给你举个例子: 我的测试字符串(很抱歉涂鸦,但这无关紧要): 我的正则表达式在js代码中: 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');
我的结果是:
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不客气,不过我必须*强调,如果两个正则表达式之间没有-
的话,第一个正则表达式会更好。