如何在Javascript Regex替换中排除结束标记

时间:2017-02-15 12:25:13

标签: javascript html regex

给出以下HTML字符串......

<a href="mylink.com">Click here to approve</a>

我需要查找并替换“点击此处批准”文字,以便HTML字符串看起来像这样......

<a href="mylink.com"><font color="green">Click here to approve</font></a>

我正在使用以下Javascript代码来完成此任务。请注意,'myHTML'实际上是一个更长的HTML字符串;我只是在这里包括相关部分。

var myHTML = '<a href="mylink.com">Click here to approve</a>';

//Change the color of the 'Approve' link to green
var approvalRegexPattern = /Click here to approve[\s\S]*?<\/a>/;
var approvalResultStr = approvalRegexPattern.exec(myHTML);
myHTML = myHTML.replace(/Click here to approve[\s\S]*?<\/a>/, '<font color="green">' + approvalResultStr + '<\/font>');

这主要是有效的,但正则表达式匹配最终包括尾随'a'标记,所以我最终得到'a'标记之外的结束'font'标记而不是内部。

<a><font color="green">Click here to approve</a></font>

如何调整我的正则表达式模式以匹配使用尾随的'a'标记,但将其从返回的字符串中排除,以便我的替换不包含它?

4 个答案:

答案 0 :(得分:0)

你可以使用parantheses&#39;()&#39;来分割你匹配的内容,这意味着结果字符串现在是一个数组,其中元素0是整个匹配,每个后续元素是每组的parantheses你指定了。有关使用代码的示例,请参阅以下内容:

wv1 = wordvecs(word1)
wv2 = wordvecs(word2)
cosine = dot(wv1,wv2)/ (sqrt(dot(wv1,wv1))*sqrt(dot(wv2,wv2)))

输出:

var myHTML = '<a href="mylink.com">Click here to approve</a>';

//Change the color of the 'Approve' link to green
var approvalRegexPattern = /(Click here to approve[\s\S]*?)(<\/a>)/;
var approvalResultStr = approvalRegexPattern.exec(myHTML);
myHTML = myHTML.replace(/Click here to approve[\s\S]*?<\/a>/, '<font color="green">' + approvalResultStr[1] + '<\/font>' + approvalResultStr[2]);

答案 1 :(得分:0)

尝试下面的代码或许它可以帮助你。

var myHTML = '<a href="mylink.com">Click here to approve</a>';

//Change the color of the 'Approve' link to green
var approvalRegexPattern = /Click here to approve[\s\S]*?/;
var approvalResultStr = approvalRegexPattern.exec(myHTML);
myHTML = myHTML.replace(/Click here to approve[\s\S]*?<\/a>/, '<font color="green">' + approvalResultStr + '<\/font></a>'); 

答案 2 :(得分:0)

如果你的字符串真的只是那个,你只需要:

&#13;
&#13;
var myHTML = '<a href="mylink.com">Click here to approve</a>';
myHTML = myHTML.replace(/(Click here to approve[^<]*)(<\/a>)/, '<font color="green">$1</font>$2');
console.log(myHTML);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我知道这个问题要求修复正则表达式,但我想知道正则表达式是否是一个要求,或者只是你选择的那种“走的路”。

原因是有恕我直言的更好的方法来实现相同的,只使用简单的CSS。

我将在下面展示三种方式:按属性值,按ID和CSS类名称进行选择。请查看它是否比原始方法更容易或更好地解决您的问题。

a[href="mylink.com"] {
  /* selection by attribute value */
  color: green
}

#someId {
  /* selection by id */
  color: red
}

.makeItPurple {
  /* selection by class name */
  color: purple
}
<a href="mylink.com">Click here to approve</a>
<br>
<a id="someId" href="otherlink.com">Click here to approve</a>
<br>
<a class="makeItPurple" href="yetanotherlink.com">Click here to approve</a>
<br>