как игнорировать .com .net или .org из текста, состоящего из предложений, заканчивающихся точкой, эскалацией или вопросительным знаком в массиве предложений? - PullRequest
0 голосов
/ 18 января 2019

Я пытался '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), чтобы игнорировать эти 3 домена из распознавания периода при разбивке предложений ... но не уверен, что это правильный способ исправить это ...

1 Ответ

0 голосов
/ 18 января 2019

Следующее правило будет разделено на ., но исключит любое вхождение ., за которым следует 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...