如何获取元素中的数字';javascript的内部文本';s正则表达式

如何获取元素中的数字';javascript的内部文本';s正则表达式,javascript,html,regex,Javascript,Html,Regex,我想通过javascript正则表达式在html的内部文本中获取数字来替换它们。 例如,在下面的代码中,我想要得到1,2,3,4,5,6,1,2,3,1,2,3,但不是div标记内部的444 <body> aaaa123aaa456 <div style="background: #444">aaaa123aaaa</div> aaaa123aaa </body> AA123AA456 aaaa123aaaa AAA123AAA

我想通过javascript正则表达式在html的内部文本中获取数字来替换它们。
例如,在下面的代码中,我想要得到1,2,3,4,5,6,1,2,3,1,2,3,但不是div标记内部的444

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

AA123AA456
aaaa123aaaa
AAA123AAA

正则表达式可能是什么?

您最好使用
innerText
textContent
获取没有标记的文本,然后使用regex
/\d/g
获取数字

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

alert(digitsInText(document.body));
如果您的HTML不在DOM中,您可以尝试自己剥离标记:


因为您需要进行替换,所以我仍然会尝试遍历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; 
  });
}

var HTML|u TOKEN=/(?:[^ |您最好的选择是使用
innerText
textContent
获取没有标记的文本,然后使用regex
/\d/g
获取数字

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

alert(digitsInText(document.body));
如果您的HTML不在DOM中,您可以尝试自己剥离标记:


因为您需要进行替换,所以我仍然会尝试遍历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; 
  });
}

var HTML|u TOKEN=/(?:[^ |您不一定需要RegExp来获取元素的文本内容,不包括其子元素”-事实上,我建议不要这样做,因为RegExp匹配HTML是出了名的困难-有DOM解决方案:

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来获取不包括其子元素的元素的文本内容-事实上,我建议不要使用它,因为RegExp与HTML的匹配是出了名的困难-有DOM解决方案:

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]);

您不能(可靠地):但正则表达式几乎可以找到字符串中的每个子字符串。您不能(可靠地):但是正则表达式可以找到字符串中几乎所有的子字符串。谢谢你的回答,但是我仍然想找到一个正则表达式,它可以找到字符串中元素的内部文本。Mike Samuel我需要替换数字,以你的方式,我应该使用一个函数并反复调用它。但是正则表达式可以n将所有html解析为字符串,我可以一次替换数字。谢谢你的回答,但我仍然想找到一个正则表达式,它可以找到字符串中元素的内部文本。Mike Samuel我需要替换数字,按照你的方式,我应该使用一个函数并反复调用它。但是使用正则表达式可以解析所有元素html作为字符串,我可以立即替换数字。