我正在努力通过正则表达式匹配模式在Javascript中替换字符串。 我想将{{ $ myparam }}的所有匹配项替换为span标记。 这有效(见下面的代码)。但是当匹配前面有href =“。
时,我想阻止替换示例:href="{{$myparam}}
不得替换。
{{$myparam}}
必须被替换。
myparam可以是任何文本字符串。
var highlighted = html.replace(/(\{\{(.*?)\}\})/g, function highlight(x) {
return "<span class='highlight'>" + x + "</span>";
});
我在其他帖子中查看了很多例子,但我找不到适合我案例的解决方案。
答案 0 :(得分:1)
您可以使用
var subject = 'href="{{$myparam}}" or any other {{$myparam}}';
var regex = /"[^"]*"|(\{\{(.*?)\}\})/g;
replaced = subject.replace(regex, function(m, group1) {
if (typeof group1 == 'undefined') return m;
else return "<span class='highlight'>" + group1 + "</span>";
});
alert(replaced);
# href="{{$myparam}}" or any other <span class='highlight'>{{$myparam}}</span>
<小时/>
这里的想法是检查
not_interesting|not_interesting_either|(very_interesting)
并检查是否存在捕获的组。您可以在左侧放置任何不感兴趣的内容,例如:"[^"]*"
(这是双引号之间的任何内容)。
如果您想了解有关该主题的更多信息,请have a look here。
答案 1 :(得分:0)
这看起来有点简单,只需将href部分设为可选:
mystring = 'this has {{$param1}} and {{$param2}} and href="{{$param3}}" too';
console.log(mystring
.replace(/(href=.)?\{\{([^{} ]+)\}\}/g,
function (match,chk,param) {
return "undefined" !== typeof(chk)
? match
: '<span class="highlight">' + param + '</span>';
}));
回调函数的第二个参数是&#39; check&#39; part,第三个参数是捕获的参数名称。由于检查部分是可选的并且相当精确,因此只有在检查部分是&#39; href =&#34;&#39;时才会定义。
输出,添加换行符以提高可读性:
this has <span class="highlight">$param1</span>
and <span class="highlight">$param2</span>
and href="{{$param3}}" too