javascript - 如何将 HTML 字符串拆分为单词和标签数组

标签 javascript regex

如何将 HTML 字符串拆分为数组,以便每个单词都是数组中的一个项目(包括其周围的标签)?

//So this string:
var myHTMLString = "Something, something <span @click='changeSelected(0)' id='0' class='wrong'>else</span> is foo <span @click='changeSelected(0)' id='0' class='wrong'>hello world</span> to all.";

//Would become this:
var HTMLAry = ["Something,", "something", "<span @click='changeSelected(0)' id='0' class='wrong'>else</span>", "is", "foo", "<span @click='changeSelected(0)' id='0' class='wrong'>hello world</span>", "to", "all."];

我们可以信赖的事情:

  • 该标记始终是 span 标记,其属性与上面的示例完全相同^
  • 并非每个单词都有 span 标记。
  • 某些单词可能有多个空格分隔。

我怎样才能实现这个目标?

我能想到的唯一可能对此起作用的是某种正则表达式,但是其他 somewhat similar answers已经说过,在大多数情况下,使用 HTML 标签时应该远离正则表达式。但正则表达式是我能想象的唯一可行的方法。

var myHTMLString = "Something, something <span @click='changeSelected(0)' id='0' class='wrong'>else</span> is foo <span @click='changeSelected(0)' id='0' class='wrong'>hello world</span> to all.";

//This^ would become this:

var HTMLAry = ["Something,", "something", "<span @click='changeSelected(0)' id='0' class='wrong'>else</span>", "is", "foo", "<span @click='changeSelected(0)' id='0' class='wrong'>hello world</span>", "to", "all."];
    
console.log(myHTMLString.match(/<span.*?>.*?<\/span\>/g));

最佳答案

创建一个元素,将元素 html 设置为您的字符串,获取子节点,按空格分割文本节点并过滤掉空值,获取其他节点的outerHTML,然后展平数组。

var myHTMLString = "Something, something <span @click='changeSelected(0)' id='0' class='wrong'>else</span> is foo <span @click='changeSelected(0)' id='0' class='wrong'>hello world</span> to all.";

var el = document.createElement('div');

el.innerHTML = myHTMLString;

var arr = Array.from(el.childNodes).map(e => e.outerHTML || e.nodeValue.split(' ').filter(t => t));

console.log([].concat.apply([], arr))

关于javascript - 如何将 HTML 字符串拆分为单词和标签数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49907329/

相关文章:

python正则表达式单词重复时间

javascript - 如何将从 Promise 获得的数据存储回具有与其来源相同的 key 的对象中?

php - 为什么使用 F5 刷新我的网络应用程序非常慢并且挂起,而在地址栏上按 Enter 键会立即刷新页面?

java - 在Java中的字符串中间开始正则表达式匹配

python - 创建具有相似拼写的 pandas 数据框变量名称列表

c# - 正则表达式查找字符串中所有出现的模式

javascript - 如何在css(或html)中定义动态高度?

javascript - Cloud Functions for Firebase 按时触发?

javascript - Angular 的 $anchorScroll 与 ng-show 配合不佳

python - 用于解析字符串并根据运算符分隔获取输出的正则表达式