Regex возвращает пустое пространство символов и неопределенный? - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь получить массив строк, который включает в себя двойные кавычки с in.

let str = `He is a "man of his" words always\ "single quote"`;
console.log(str);
let re5 = /((["]).*?\2|\S+)/g;
let abc = str3.split(re4);
console.log(abc);

Ожидаемый результат, [«Он», «есть», «а», «человек его», «слова», «всегда», «» одиночная кавычка "']

Но я получаю

[' ',' He ', undefined,' ',' is ', undefined,' ',' a ', undefined,' ',' 'человек его' ',' '', '', 'words', undefined, '', 'Always', undefined, '', '' одинарная кавычка '', '' ',' ']

Нужна помощь для исправления приведенного выше регулярного выражения, я не понимаю причину этого пустого пространства строк и не определена.

1 Ответ

2 голосов
/ 21 марта 2020

Либо совпадение ", за которым в конечном итоге следует ", либо совпадение с одним или несколькими непробельными символами:

let str = `He is a "man of his" words always\ "single quote"`;
console.log(str.match(/"[^"]+"|\S+/g));

Если у вас есть группы захвата с split, каждая группа захвата включается в результат. У вас есть 2 группы захвата, поэтому для каждого матча элементы в этих группах включены. (Если группа захвата вообще не совпадает для одного конкретного совпадения, результат равен undefined - что происходит, например, когда группа захвата находится в одном чередовании, но шаблон следует за другим.) Независимо от этого, используя .match намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...