0

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

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

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>

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

换句话说,结果必须是:

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

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

4

2 回答 2

2

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

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

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

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

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

+?导致惰性匹配,或者换句话说,在匹配初始字符之后-,然后.+?匹配单个字符,然后它将控制移动到-尝试匹配破折号的后面,如果它不能然后从输入.+?中读取(消耗)另一个字符等等直到以下-能够匹配。

于 2013-09-29T13:42:25.460 回答
1

你可以试试:

view.replace(/-([^-]+)-/g, '<span style="background-color:yellow">$1</span>');
于 2013-09-29T13:40:02.567 回答