有没有办法通过JavaScript从innerText创建单个单词的数组?

有没有办法通过JavaScript从innerText创建单个单词的数组?,javascript,arrays,innertext,Javascript,Arrays,Innertext,我有一个字符串,看起来像这样: <strong>word</strong>: or <em>word</em> or <p><strong>word</strong>: this is a sentence</p> etc... 字符串: <p><strong>word</strong>: this is a sentence</p> 是否仍然可以通

我有一个字符串,看起来像这样:

<strong>word</strong>: or <em>word</em> or <p><strong>word</strong>: this is a sentence</p> etc...
字符串:

<p><strong>word</strong>: this is a sentence</p>
是否仍然可以通过Javascript实现这一点? 我下面的代码是创建单个字符的数组,而不是用空格分隔的单词

//w=我要分析的字符串
var p=document.querySelector(“p”).innerText;
var结果=p.split(“”).map(函数(w){
如果(w=='')
返回w;
否则{
var tempDivElement=document.createElement(“div”);
tempDivElement.innerHTML=w;
const-wordArr=Array.from(tempDivElement.textContent);
返回字arr;
}
});
console.log(结果)

word:这是一个句子

我将首先生成temp div并提取内部文本。然后使用
match()
查找单词(注意
\w
匹配字母、数字和下划线)。这将像
一样将标点符号视为单独的单词,这似乎是您想要的

p='word:或word或word:这是一个句子

var tempDivElement=document.createElement(“div”); tempDivElement.innerHTML=p; 设t=tempDivElement.innerText 让words=t.match(/\w+\S/g)
log(words)
您可以创建一个临时HTML元素,然后简单地获取其
文本内容

例如:

/*仅获取按空格分隔的单词*/
函数myFunction1(htmlString){
var div=document.createElement('div');
div.innerHTML=htmlString;
return(div.textContent | | div.innerText).toString().split(“”);
};
/*获取按空格分隔的单词以及HTML标记*/
函数myFunction2(htmlString){
var div=document.createElement('div');
div.innerHTML=htmlString;
var children=div.queryselectoral('*');
对于(变量i=0;iword:或word或word:这是一个句子,

等…”); log('函数2结果:');
console.log(myFunction2(“word:或word或word:这是一个句子,

等…”)一种可能的方法是使用内置DOMParser方法:

var string = '<strong>word</strong>: or <em>word</em> or <p><strong>word</strong>: this is a sentence</p> etc...';
var doc = new DOMParser().parseFromString(string, 'text/html');
var string='word:或word或word:这是一个句子

等等; var doc=new DOMParser().parseFromString(string,'text/html');
然后,您需要通过
childNode
s递归地进入
doc
HTMLDocument
对象

类似地,您可以使用客户端javascript web scraper,例如,并以这种方式检查节点

对于不在实际标记中的字符串,例如“:或”您需要先将字符串包装在
标记或其他内容中。

基于此答案:您可以递归地迭代每个节点,并将文本部分添加到数组中。例如:

var项目=[];
var elem=document.querySelector(“div”);
函数getText(节点){
//递归到每个子节点
if(node.hasChildNodes()){
node.childNodes.forEach(getText);
}else if(node.nodeType===node.TEXT\u node){
const text=node.textContent.trim();
如果(文本){
var words=text.split(“”);
words.forEach(函数(word){
项目。推送(word);
});
}
}
}
//
getText(elem);
控制台日志(项目)
word:或word或word:这是一个句子

在“word”值后面的冒号是一个棘手的部分,但是使用
textContent
属性和一些字符串操作,您可以将一个字符串设置为
split()
到您要查找的数组中

首先,收集要分析的元素:

var p = document.querySelector("p");
接下来,使用“textContent”属性从其内部获取文本内容:

var pContent = p.textContent;
接下来,“按摩”内容,以确保任何“非单词”字符与单词分开,而不会丢失(两端的空格处理单词前后的非单词字符):

接下来,修剪所有前导或尾随空格,以避免在数组的开头和结尾出现emty元素:

var result = result.trim();
最后,将更新后的字符串按空格块分割:

var result = result.split(/\s+/);

然而,让这一点变得更好的是,如果您愿意,您实际上可以在一行代码中完成所有操作,如下面的浓缩解决方案所示:

var element1=document.querySelector(“#element1”);
var element2=document.querySelector(“#element2”);
var element3=document.querySelector(“#element3”);
函数元素TextToArray(元素){
return element.textContent.replace(/(\W+)/g,“$0”).trim().split(/\s+/);
}
console.log(elementTextToArray(element1));
log(elementTextToArray(element2));
console.log(elementTextToArray(element3))

word

这是一个句子

word:这是一个具有多层次深度的句子

  • 为了在该代码段中正确地执行此操作,在目标HTML周围包装了一个
  • 使用
    .textContent
  • 使用
    .replace()
    传递正则表达式
    /(\s+\n)/g
    将其清除,该正则表达式将用单个空格替换任意数量的相邻空格或换行符。字符串的两端是
    .trim()
  • 然后
    .split()
    
    
    let text=document.querySelector('.content').textContent;
    让clean=text.replace(/(\s+\n)/g',).trim();
    让数组=clean.split(“”);
    
    var pContent = p.textContent;
    
    var result = pContent.replace(/(\W+)/g, " $0 ");
    
    var result = result.trim();
    
    var result = result.split(/\s+/);