首页 > 解决方案 > 如何从由句号、升级或问号结尾的句子组成的文本中忽略 .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)错误的意思是在分解句子时从句号识别中忽略这三个域....但不确定修复它的正确方法...

标签: javascriptregex

解决方案


以下规则将拆分.但排除任何出现的.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);


推荐阅读