2

重複の可能性:
正規表現は、XHTML の自己完結型タグを除く開始タグに一致します

すべての単語に一致させるのではなく、HTML タグの外側にあるいくつかの英数字の単語に一致させるにはどうすればよいですか

例:

<div id="mariano mariano mariano" nota="mariano/mariano">mariano was looking forward Mariano. I want to match this "Mariano" too. Mariano</div>

この例では、タグ ID 以外のすべての「Mariano」に一致させたいと考えています。

この問題の鍵は、「>」の前に「<」があり、その単語に一致することだと思いますが、正規表現が「<」の前に「>」を見つけた場合、これはその単語がタグ内にあることを意味しますが、このための正規表現を達成/生成することができませんでした。

(?<=^|>)[^><]+?(?=<|$)この正規表現を別の正規表現と連結しようとして失敗しました。そして、私の最終的な最低品質の解決策は次のとおりです。

<!-- language: lang-js -->
var searchFor = new RegExp("((!?<=^|>)" + termino + ")","ig");
var searchFor2 = new RegExp("(" + termino + "(?=<|$))","ig");
var searchFor3 = new RegExp("(!?<=^|[\\s\\.;,])" + termino + "(?=[\\s\\.;,]|$)","ig");

ただし、これらの 3 つはすべての選択肢をカバーしているわけではありません。

編集:私はjavascriptで作業しています:

<script>
container.find("p, span, div, .texto,").each(function() {
var containerText = $(this).html();
for (var i = 0; i < terms.length; i++) {
    var termino = terms[i];
    // 1st issue ">termino" was remplaced for: ">Pedro"
    var searchFor = new RegExp("((!?<=^|>)" + termino + ")","ig");
    containerText = containerText.replace(searchFor,">Pedroedro");
    // 2nd issue "termino<" was remplaced for: "Pedro"
    var searchFor2 = new RegExp("(" + termino + "(?=<|$))","ig");
    containerText = containerText.replace(searchFor2,"Pedro");
    // 3rd issue "[\.\s,;:]termino[\.\s,;:]
    var searchFor3 = new RegExp("(!?<=^|[\\s\\.;,])" + termino + "(?=[\\s        \\.;,]|$)","ig");
    containerText = containerText.replace(searchFor3," Pedro");
};
$(this).html(containerText);
}); 
</script>
4

1 に答える 1

1

いくつかのこと -

  1. スタックオーバーフローへようこそ!
  2. 質問する前に質問を検索してください。xml を正規表現で解析した結果は多数あります。
  3. xml/html の解析に正規表現を使用しないでください。 xpath を試してください

    var termino = // how ever you were defining before...
    
    // Give me all divs, where the text content contains value of "termino"
    var iterator = document.evaluate('//div/text()[contains(.,' + termino + ')]', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null );
    
    try {
      // init thisNode to the first item in the iterator
      var thisNode = iterator.iterateNext();
    
      // go through all items, alert their content (which should contain termino)
      while (thisNode) {
        alert( thisNode.textContent );
        thisNode = iterator.iterateNext();
      } 
    }
    catch (e) {
       dump( 'Error: Document tree modified during iteration ' + e );
    }
    
于 2012-09-19T22:00:47.390 に答える