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

时间:2013-09-29 13:38:14

标签: javascript regex

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

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

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括起来,但只有一个跨度。我怎么解决这个问题? (老实说,我不想改变我的(。+)正则表达式部分,我认为这可能是一个问题,但如果没有其他方法可以做到这一点,请告诉我)。

换句话说,结果必须是:

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

随时在评论中问我,谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

  老实说我不想改变我的(。+)正则表达式部分,我觉得这可能是个问题

为什么不,它实际上是问题的根源,你可以试试下面的正则表达式:

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

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

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

+?会导致lazy match,或者换句话说,在匹配初始-后,然后.+?匹配单个字符,然后它将控件移动到以下{{1}尝试匹配破折号,如果它不能,那么-从输入中读取(消耗)另一个字符,依此类推,直到下面的.+?能够匹配。

答案 1 :(得分:1)

您可以尝试:

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