Javascript正则表达式:如果前面加上href =“则排除结果

时间:2017-11-23 15:26:21

标签: javascript regex

我正在努力通过正则表达式匹配模式在Javascript中替换字符串。 我想将{{ $ myparam }}的所有匹配项替换为span标记。 这有效(见下面的代码)。但是当匹配前面有href =“。

时,我想阻止替换

示例:href="{{$myparam}}不得替换。 {{$myparam}}必须被替换。 myparam可以是任何文本字符串。

  var highlighted = html.replace(/(\{\{(.*?)\}\})/g, function highlight(x) {
       return "<span class='highlight'>" + x + "</span>";
   });

我在其他帖子中查看了很多例子,但我找不到适合我案例的解决方案。

2 个答案:

答案 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>

a demo on regex101.com

<小时/> 这里的想法是检查

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