如何获取元素中的数字';javascript的内部文本';s正则表达式
我想通过javascript正则表达式在html的内部文本中获取数字来替换它们。如何获取元素中的数字';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
例如,在下面的代码中,我想要得到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作为字符串,我可以立即替换数字。