你能告诉我如何在javascript中使用正则表达式来选择引用的文本,而不是链接中的那个
所以我不想选择这些引号<a href="some link">some text</a>
我想只选择正常的引用文本
我用过
result = content.replace(/"(.*?)"/g, "<i>$1</i>");
用斜体替换所有带引号的文本,但它也替换了href引号
谢谢:)
答案 0 :(得分:1)
如果您需要adhoc正则表达式解决方案,则可以匹配并捕获标记,并仅替换其他上下文中的"
符号。将代码定义为<
+非<
直至第一个>
,我们可以使用
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;
(<[^<]*?>)|"(.*?)"
匹配:
(<[^<]*?>)
- 第1组(回调后期g1
),尽可能少地捕获<
,0 +以外的符号,直至第一个<
>
1}} |
- 或"(.*?)"
- "
,除了换行符之外的0 +个字符尽可能少地被捕获到第2组(稍后g2
)和"
。在回调方法中,检查组1是否匹配,如果是,我们只是将标记放回结果中,否则,用标记替换。
答案 1 :(得分:0)
最简单的答案是使用:
/[^=]"(.*)"/
而不是
/"(.*?)"/
但这也包括在他们之前有=符号的引号。
答案 2 :(得分:0)
为什么不只对元素的实际文本起作用...喜欢:
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;
这里我们将所有锚元素作为数组获取,并用{em>斜体版本替换innerHTML
文本。
答案 3 :(得分:0)
这种模式可能是您正在寻找的:<.+>.*(\".+\").*</.+>
在JavaScript中使用,以下匹配&#34; text&#34;:
new RegExp('<.+>.*(\".+\").*</.+>', 'g').exec('<a href="some link">some "text"</a>')[1]