javascript - JavaScript 使用 map 来根据 '\n' 之类的字符划分字符串数组
问题描述
我正在使用地图来尝试清理发送到具有句子解析器的 API 的数据,该问题在找到 \n 或 \t 时确实会中断,因此选择暂时替换:
const allBulletPoints = Array.from(document.querySelectorAll('ul,ol'));
const allBulletPointsText = allBulletPoints.map((element) =>
element.textContent
.split(/(\t)|(\n)/g)
.filter((element) => element && !element.match(/(\t)|(\n)/gi))
);
console.log(allBulletPointsText);
/*
Result:
[
[
" Lorem ipsum dolor sit amet consectetur, adipisicing elit",
" Lorem ipsum dolor sit amet consectetur, adipisicing elit",
" Lorem ipsum dolor sit amet consectetur, adipisicing elit",
" "
],
[
" Lorem ipsum dolor sit amet consectetur, adipisicing elit",
" Lorem ipsum dolor sit amet consectetur, adipisicing elit",
" Lorem ipsum dolor sit amet consectetur, adipisicing elit",
" "
]
]
I need to be like this:
[
"Lorem ipsum dolor sit amet consectetur, adipisicing elit",
"Lorem ipsum dolor sit amet consectetur, adipisicing elit",
"Lorem ipsum dolor sit amet consectetur, adipisicing elit",
"Lorem ipsum dolor sit amet consectetur, adipisicing elit",
"Lorem ipsum dolor sit amet consectetur, adipisicing elit",
"Lorem ipsum dolor sit amet consectetur, adipisicing elit",
]
*/
<ul>
<li>Lorem ipsum dolor sit amet consectetur, adipisicing elit</li>
<li>Lorem ipsum dolor sit amet consectetur, adipisicing elit</li>
<li>Lorem ipsum dolor sit amet consectetur, adipisicing elit</li>
</ul>
<ol>
<li>Lorem ipsum dolor sit amet consectetur, adipisicing elit</li>
<li>Lorem ipsum dolor sit amet consectetur, adipisicing elit</li>
<li>Lorem ipsum dolor sit amet consectetur, adipisicing elit</li>
</ol>
但是现在我想使用 substr 或 split 做一些更干净的事情,然后将所有元素分开添加并添加到同一个数组中。
知道如何使用此功能获得更好的解决方案吗?
解决方案
element.match(/(\t)|(\n)/gi)
没有做任何事情,因为已经split
删除了所有\t
和\n
。- 您可以将其构建到拆分中,而不是单独修剪
split(/\s*?[\t\n]\s*/g)
每一行。或者只是使用match
来匹配您感兴趣的内容。 - 连接数组可以用
Array#flat()
.
所以这可能是你正在寻找的:
const allBulletPointsText = Array.from(
document.querySelectorAll('ul,ol'),
e => e.textContent.match(/\S[^\t\n]*\S|\S/g) || []
// or: e => e.textContent.trim().split(/\s*?[\t\n]\s*/g).filter(e => e)
// or: e => e.textContent.split(/^\s+|\s*?[\t\n]\s*|\s+$/g).filter(e => e)
// or: e => e.textContent.split(/[\t\n]+/g).map(e => e.trim()).filter(e => e)
).flat();
推荐阅读
- psql - 需要返回位于未来 1 个月或更长时间的日期范围(通常为 1 周)内的 MAX(DATE)
- javascript - 从父组件切换布尔状态
- python - Raspberrypi python显示内存中的图像
- python - 在 Python 3 中查找列表索引号?
- mongodb - 如何从丢失的遗留 MongoDB 中恢复数据/恢复到以前的 mongo 迭代?
- django - 我正在更新我的 pg_hba.conf,但文件每天都会重置为默认值
- python - 从odoo 10中现有打开的窗口调用向导窗口?
- xslt - XSL:只有特定祖先的后代
- regex - 使用正则表达式和 sed 将占位符 - 波浪号 ~ 替换为实际内容
- node.js - 是否可以在 Angular 项目中使用 NodeJs 包?