Разбить строку на вопросительный знак, восклицательный знак или точку в javascript и сохранить эти знаки? - PullRequest
0 голосов
/ 23 декабря 2018

Я был немного удивлен, что на самом деле никто не сталкивался с такой же проблемой в javascript ...

Я пробовал несколько разных решений, но ни одно из них не анализировало контент правильно.

Ближайшийодин я попробовал: (Я украл его запрос регулярного выражения из решения PHP)

const test = `abc?aaa.abcd?.aabbccc!`;
const sentencesList = test.split("/(\?|\.|!)/");

Но результат просто будет ["abc?aaa.abcd?.aabbccc!"]

То, что я хочу получить, это ['abc?', 'aaa.', 'abcd?','.', 'aabbccc!'] Ятак растерялся .. что именно не так?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Чтобы помочь вам, то, что вы пишете, не является регулярным выражением.test.split("/(\?|\.|!)/"); - это просто строка из 11 символов.Регулярное выражение будет, например, test.split(/(\?|\.|!)/);.Это все равно не будет искомым регулярным выражением.

Проблема с этим регулярным выражением заключается в том, что он ищет ?, . или ! символ только и захватить этого одинокого персонажа.Вам нужно найти любое количество символов, за которым следует один из этих трех символов.

Далее String.split не принимает регулярные выражения в качестве аргументов.Вы захотите использовать функцию, которая принимает их (например, String.match ).

Собрав все это вместе, вы захотите начать свое регулярное выражение с чем-то вроде этого: /.*?/.Точка означает совпадение любого символа, звездочка означает 0 или более, а вопросительный знак означает «не жадный» или попытайтесь найти как можно меньше символов, сохраняя при этом действительное совпадение.

Для поискатри символа, после этого вы должны указать /[?!.]/, чтобы указать, что вам нужен один из этих трех символов (пока у нас есть /.*?[?!.]/).Наконец, вы хотите добавить флаг g, чтобы он выполнял поиск для каждого экземпляра, а не только для первого./.*?[?!.]/g.Теперь мы можем использовать его в match:

const rawText = `abc?aaa.abcd?.aabbccc!`;
const matchedArray = rawText.match(/.*?[?!.]/g);
console.log(matchedArray);
0 голосов
/ 23 декабря 2018

/[a-z]*[?!.]/g) будет делать то, что вы хотите:

const test = `abc?aaa.abcd?.aabbccc!`;
console.log(test.match(/[a-z]*[?!.]/g))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...