javascript - 如何从特殊字符之间提取多个字符串
问题描述
我在定义正确的正则表达式时遇到问题。
我需要将文本分成组,这样我将有一组位于大括号内的数字组和一组位于这些大括号之间的文本组/数组。
示例文本:
{3} Lorem ipsum "dolor" sat amet,{2} consectetur adipiscing elit。{5}Sed semper;sollicitudin diam,“posuere”{3}aliquet massa pulvinar nec。
我想要两个数组:
- [3,2,5,3]
- ["Lorem ipsum "dolor" sit amet", "consectetur adipiscing elit.", "Sed semper; sollicitudin diam, "posuere"", "aliquet massa pulvinar nec."]
几乎我做到了,但我对文本中的特殊字符有疑问(输入文本中禁止使用大括号字符)。我现在的正则表达式:
\{(.)\}+([\d\w\s]+)
它返回:
- [“{3} Lorem ipsum”、“{2} consectetur adipiscing elit”、“{5}Sed semper”、“{3}aliquet massa pulvinar nec”]
我知道以后我可以在每个数组元素上使用 .split('}') 子字符串等从文本中拆分数字(它不会很好,但它会起作用)。
解决方案
String.prototype.matchAll()
返回所有匹配项及其捕获组的迭代器,然后您可以使用它来填充单独的数组。
const s = `{3} Lorem ipsum "dolor" sit amet, {2} consectetur adipiscing elit. {5}Sed semper; sollicitudin diam, "posuere" {3}aliquet massa pulvinar nec.`
const reg = /\{(\d+)\}(.*?)(?=\{|$)/g;
const matches = s.matchAll(reg);
const braces = [],
text = [];
for (const match of matches) {
const [_, b, t] = match;
braces.push(b);
text.push(t);
}
console.log(braces);
console.log(text);
或映射到您选择的形状的数组。
const s = `{3} Lorem ipsum "dolor" sit amet, {2} consectetur adipiscing elit. {5}Sed semper; sollicitudin diam, "posuere" {3}aliquet massa pulvinar nec.`
const reg = /\{(\d+)\}(.*?)(?=\{|$)/g;
const matches = Array.from(s.matchAll(reg), ([_, digit, text]) => ({digit, text}));
console.log(matches);
推荐阅读
- ruby-on-rails - 有没有办法在 Rails 应用程序中使用 GraphQL 和 Elasticsearch?
- rest - REST API PATCH 请求预期行为
- r - 使用 nls 跳过数据表计算中的错误
- python - 如何使用python将csv数据输出到终端
- android - 有没有办法检查我当前连接的 wifi 是否与以前连接的 wifi 不同?
- sh - 如何使用 sh 脚本对 crontab 作业进行哈希处理
- angular - Cannot properly set RequestOptionsArgs of POST, in service
- google-cloud-platform - 将近线存储转换为区域存储然后定期返回的成本是多少?
- mysql - MySQL查询列出不在另一个表中的用户
- caching - Drupal 8, Browser language detection fails after some time (anonymous users)