RegEx查找标签和变量

时间:2013-08-19 14:09:19

标签: javascript jquery html regex replace

请您更正我的RegExp以便它可以正常工作吗?我需要检查我要替换的字符串是否没有被标记包围。

var re = new RegExp("<a\b[^>]*>"+variable+"<\/a>","gi");

2 个答案:

答案 0 :(得分:1)

您必须先捕获所有链接并自行替换它们:

var variable = "os";
var yourstring= "sdfsdlkjfsd <a href=blux> os</a> sdfsdflkjsdf os";

var re = new RegExp("(<a\\b[^>]*>(?:[^<]+|<(?!/a>))*</a>)|("+variable+")","gi");

function replacer(match, p1, p2){
    var replacement = "glups";
    return (p1)? p1 : replacement;
};
var result = yourstring.replace(re, replacer);
console.log(result);

模式细节:

(?:[^<]+|<(?!/a>))*描述了“a”代码之间的内容,意味着所有不是<<的内容不是结束“a”的一部分标签

(?:          # open a non capturing group
    [^<]+    # all characters except < one or more times
  |          # OR
    <(?!/a>) # < not followed by "/a>"
)*           # close the non capturing group and repeat zero or more times

答案 1 :(得分:0)

您需要将\\b中的反斜杠加倍,以便将其作为\b的正则表达式:

var re = new RegExp("<a\\b[^>]*>"+variable+"<\/a>","gi");