javascript - 如何从由句号、升级或问号结尾的句子组成的文本中忽略 .com .net 或 .org 成句子数组?
问题描述
我试过了'abc.com setence 1. sentence2?sentence3.com. sentence 4 something here!'.match(/.*?[?!.(?!com | net| org)]/g)
但得到(56) ["abc", ".", "c", "o", "m", " ", "se", "t", "e", "n", "c", "e", " ", "1.", " ", "se", "n", "t", "e", "n", "c", "e", "2?", "se", "n", "t", "e", "n", "c", "e", "3.", "c", "o", "m", ".", " ", "se", "n", "t", "e", "n", "c", "e", " ", "4 ", "so", "m", "e", "t", "hin", "g", " ", "he", "r", "e", "!"]
我想要得到的是类似
['abc.com sentence1.','sentence2?','sentence3.com.', 'sentence 4 something here!'
]
我认为我放置了(?!com | net| org)
错误的意思是在分解句子时从句号识别中忽略这三个域....但不确定修复它的正确方法...
解决方案
以下规则将拆分.
但排除任何出现的.
com、net 或 org。?
此外,它会被或分割!
。最后,使用一些数组方法来清理结果并确保保留标点符号。
const str = 'abc.com setence 1. sentence2?sentence3.com. sentence 4 something here!';
var splits = str.split(/(\.(?!com|net|org)|\?|!)/i);
var final = [];
splits = splits
.map(el => el.trim())
.filter(el => el !== '');
for (let i = 0; i < splits.length; i++) {
splits[i] += splits[i+1];
splits.splice(i + 1, 1);
}
console.log(splits);
推荐阅读
- iphone - 带有 Ext JS 现代 6.5.3 的 Safari 浏览器中的 iOS 11.3.1 Iframe 滚动问题
- php - 在 Laravel 中使用 request->all 保存所有记录记录
- c - C - 如何确定 JSON 消息的字节数
- php - 字体系列重叠
- if-statement - 在一个大的 if-else 中管理多个变量
- python - 短路 numpy logical_and 在 pandas 系列上
- solr - Wht 是与 Solr 一起使用的最佳开源 NLP 工具
- php - 如何在php中增加会话时间
- counter - Add() 在 Java 中不起作用(Greenfoot)
- javascript - HTML5 File API - 使用 PHP 将 blob 保存到文件