0

そのため、ページ上の複数の要素のすべてのテキストURLをアンカータグのそのURLに置き換えようとしています。

http://google.com=><a target="_blank" href="http://google.com">http://google.com</a>

var titles = document.querySelectorAll(".title");
var l = titles.length, i, title;
    for(i = 0; i < l; i++) {
    console.log('foo')
    title = titles[i];
    title.innerHTML = title.innerHTML.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,"<a target='_blank' href='$1'>$1</a>")
}

href=""問題は、いくつかのAJAXが戻ってきて、アンカータグの属性のURLにアンカータグを再適用した後で、正規表現を再度実行する必要があることです。したがって、この正規表現に負の先読みを追加して、URLが末尾"または。と一致しないようにする必要があり'ます。

一致http://google.comするが一致しない"http://google.com"

/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig

4

1 に答える 1

2

何かが二重引用符の中にないことを主張する一般的な先読み手法は、文字列の終わりまでそれらの数が偶数であることを確認することです。

yourPatternHere(?=[\s\S]*(?:"[\s\S]*"[\s\S])*$)

しかし、あなたはHTMLを操作しています。これにより、あらゆる種類の問題が発生する可能性があります(テキストノードでの不一致の引用符、コメント、一重引用符で区切られた属性値など)。HTMLの解析に正規表現を使用しないでください。代わりに、JavaScriptの組み込みDOM操作機能を可能な限り使用してください。要素を見つけるだけ.titleでなく、代わりにそれらのテキストノードをトラバースし、それらにのみ置換を適用します。

于 2012-12-02T13:03:33.783 に答える