Regex: почему я получаю пустую строку в результате - PullRequest
0 голосов
/ 12 апреля 2020

ОК, я не очень хорош в Regex. Я хочу разделить с разделителем, сохраняя его. В качестве вывода я хочу получить

(3) ["'", "TEST", "'"]

Когда я использую:

"'TEST'".split(/(['])/g);

Вместо этого я получаю:

(5) ["", "'", "TEST", "'", ""]

Это почти то, что я хочу, но я также получаю 2 пустых строки. Почему?

Ответы [ 3 ]

1 голос
/ 12 апреля 2020

Регулярное выражение кажется излишним для этой цели. Примерно так работает:

"'TEST'".split("'").map(str => (str.length) ? str : "'");
// [ "'", 'TEST', "'" ]
1 голос
/ 12 апреля 2020

В результате вы получите две пустые строки в вашем массиве, поскольку первый символ ' отделяет пустую строку в начале от строки TEST, а второй символ ' отделяет строку TEST от другой пустой строка в конце.


Вы можете просто использовать String.prototype.match() вместо String.prototype.split():

console.log("'TEST'".match(/'|[^']+/g));

Убедитесь, что вы проверяете null возвращаемое значение из .match(), но это возможно только с этим конкретным регулярным выражением при применении к пустой строке.

0 голосов
/ 12 апреля 2020

Вы можете сделать трюк, используя позитивный взгляд и взгляд назад :

> "'TEST'".split(/(?<=')(.+)(?=')/g)
["'", "TEST", "'"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...