0

HTMLの内部テキストの数字をjavascript正規表現で取得して置き換えたいです。
たとえば、次のコードでは、1,2,3,4,5,6,1,2,3,1,2,3 を取得したいのですが、div タグ内の 444 は取得したくありません。

<body>
  aaaa123aaa456
  <div style="background: #444">aaaa123aaaa</div>
  aaaa123aaa
</body>

正規表現は何ですか?

4

3 に答える 3

4

あなたの最善の策は、タグなしでテキストを使用innerTextまたは取得し、正規表現を使用して数字を取得することです。textContent/\d/g

function digitsInText(rootDomNode) {
  var text = rootDomNode.textContent || rootDomNode.innerText;
  return text.match(/\d/g) || [];
}

例えば、

alert(digitsInText(document.body));

HTML が DOM にない場合は、自分でタグを削除してみてください: JavaScript: 文字列から HTML タグを削除する方法は?


置換を行う必要があるため、私は引き続き DOM を歩き回り、テキスト ノードを個別に操作しようとしますが、それが問題外である場合は、試してください。

var HTML_TOKEN = /(?:[^<\d]|<(?!\/?[a-z]|!--))+|<!--[\s\S]*?-->|<\/?[a-z](?:[^">']|"[^"]*"|'[^']*')*>|(\d+)/gi;

function incrementAllNumbersInHtmlTextNodes(html) {
  return html.replace(HTML_TOKEN, function (all, digits) {
    if ("string" === typeof digits) {
      return "" + (+digits + 1);
    }
    return all; 
  });
}

それから

incrementAllNumbersInHtmlTextNodes(
    '<b>123</b>Hello, World!<p>I <3 Ponies</p><div id=123>245</div>')

生産する

    '<b>124</b>Hello, World!<p>I <4 Ponies</p><div id=123>246</div>'

endのような特別な要素の周りで混乱し、<script>エンティティがエンコードされた数字を認識しませんが、それ以外の場合は機能するはずです。

于 2013-02-19T20:22:37.523 に答える
0

子孫要素を除く要素のテキスト コンテンツを取得するために必ずしも RegExp が必要というわけではありません。

function getImmediateText(element){
    var text = '';

    // Text and elements are all DOM nodes. We can grab the lot of immediate descendants and cycle through them.
    for(var i = 0, l = element.childNodes.length, node; i < l, node = element.childNodes[i]; ++i){
    // nodeType 3 is text
        if(node.nodeType === 3){
            text += node.nodeValue;
        }
    }

    return text;
}

var bodyText = getImmediateText(document.getElementsByTagName('body')[0]);

したがって、ここには、直接のテキスト コンテンツのみを文字列として返す関数があります。もちろん、次のようなものを使用して、RegExp を使用して数値を削除することもできます。

var numberString = bodyText.match(/\d+/g).join('');
于 2013-02-19T20:31:35.953 に答える