我有一个正则表达式,以及一个包含此正则表达式匹配项的字符串。我的正则表达式处理所有这些匹配,就像它只有一个大的匹配(当然我不想要这样的行为),让我给你举个例子:
我的测试字符串(抱歉涂鸦,但这没关系):
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>
随时在评论中问我,谢谢你的帮助。
答案 0 :(得分:2)
老实说我不想改变我的(。+)正则表达式部分,我觉得这可能是个问题
为什么不,它实际上是问题的根源,你可以试试下面的正则表达式:
/(\-([^-]+)\-)/g
如果您认为破折号-
可以出现在-
和-
之间,那么您可以使用效率较低的代码:
/(\-(.+?)\-)/g
+?
会导致lazy match,或者换句话说,在匹配初始-
后,然后.+?
匹配单个字符,然后它将控件移动到以下{{1}尝试匹配破折号,如果它不能,那么-
从输入中读取(消耗)另一个字符,依此类推,直到下面的.+?
能够匹配。
答案 1 :(得分:1)
您可以尝试:
view.replace(/-([^-]+)-/g, '<span style="background-color:yellow">$1</span>');