正则表达式仅匹配不在链接中的引号

时间:2016-09-08 11:21:33

标签: javascript regex

你能告诉我如何在javascript中使用正则表达式来选择引用的文本,而不是链接中的那个

所以我不想选择这些引号<a href="some link">some text</a> 我想只选择正常的引用文本

我用过

result = content.replace(/"(.*?)"/g, "<i>$1</i>"); 

用斜体替换所有带引号的文本,但它也替换了href引号

谢谢:)

4 个答案:

答案 0 :(得分:1)

如果您需要adhoc正则表达式解决方案,则可以匹配并捕获标记,并仅替换其他上下文中的"符号。将代码定义为< +非<直至第一个>,我们可以使用

&#13;
&#13;
var s = '"replace this" but <div id="not-here"><a href="not this"></a> "and here"</div>';
var re = /(<[^<]*?>)|"(.*?)"/g;
var result = s.replace(re, function (m,g1,g2) {
  return g1? g1 : '<i>' + g2 + '</i>';
});
console.log(result);
&#13;
&#13;
&#13;

(<[^<]*?>)|"(.*?)"匹配:

  • (<[^<]*?>) - 第1组(回调后期g1),尽可能少地捕获<,0 +以外的符号,直至第一个< > 1}}
  • | - 或
  • "(.*?)" - ",除了换行符之外的0 +个字符尽可能少地被捕获到第2组(稍后g2)和"

在回调方法中,检查组1是否匹配,如果是,我们只是将标记放回结果中,否则,用标记替换。

答案 1 :(得分:0)

最简单的答案是使用:

/[^=]"(.*)"/

而不是

/"(.*?)"/

但这也包括在他们之前有=符号的引号。

答案 2 :(得分:0)

为什么不只对元素的实际文本起作用...喜欢:

&#13;
&#13;
var anchors = [],
    idx;

anchors = Array.prototype.slice.call(document.getElementsByTagName("a"));
for(idx=0; idx<anchors.length; idx++) {
    anchors[idx].innerHTML = anchors[idx].innerHTML.replace(/"([^"]*)"/g, '<i>$1</i>');
}
&#13;
<a href="some link">some text that contains a "quoted" part.</a>
<br/>
<a href="another link">more "text" that contains a "quoted" part.</a>
&#13;
&#13;
&#13;

这里我们将所有锚元素作为数组获取,并用{em>斜体版本替换innerHTML文本。

答案 3 :(得分:0)

这种模式可能是您正在寻找的:<.+>.*(\".+\").*</.+>

在JavaScript中使用,以下匹配&#34; text&#34;:

new RegExp('<.+>.*(\".+\").*</.+>', 'g').exec('<a href="some link">some "text"</a>')[1]