正则表达式像一个一样处理多个匹配项,如何修复

Regular expression handle multiple matches like one, how to fix?

本文关键字:何修复 一样 一个 正则表达式 处理      更新时间:2023-09-26

我有一个正则表达式和一个字符串,其中包含此正则表达式的一些匹配项。我的正则表达式处理所有这些匹配,就像它只是一个大匹配一样(当然我不想要这样的行为),让我给你看一个例子:

我的测试字符串(抱歉涂鸦,但这没关系):

sdfsd -dsf- sdfsdfssdfsfdsfsd -sdfsdf- 

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

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

我的结果:

sdfsd<span style="background-color:yellow">-dsf- sdfsdfssdfsfdsfsd -sdfsdf-</span>

如您所见,"-"中的每个字符串都必须包含在 span 中,但只有一个 span。我该如何解决这个问题?(老实说,我不想更改我的 (.+) 正则表达式部分,我认为这可能是一个问题,但如果没有其他方法可以做到这一点,请告诉我)。

换句话说,结果必须是:

sdfsd<span style="background-color:yellow">-dsf-</span> sdfsdfssdfsfdsfsd <span style="background-color:yellow">-sdfsdf-</span>

请随时在评论中问我,并感谢您的帮助。

老实说,我不想更改我的 (.+) 正则表达式部分,我认为这可能是一个问题

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

/('-([^-]+)'-)/g

如果您认为破折号-可以出现在--之间,那么您可以使用效率较低的:

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

+?会导致延迟匹配,或者换句话说,在匹配初始-之后,.+?匹配单个字符,然后它将控制权移动到以下尝试匹配破折号的-,如果不能,则.+?从输入中读取(使用)另一个字符,依此类推,直到下一个-能够匹配。

你可以试试:

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