Разделение строки по регулярному выражению не работает нормально в JavaScript - PullRequest
0 голосов
/ 03 декабря 2018

в javascript, я использую метод split по регулярному выражению для приведенной ниже строки, но он не работает нормально в коде javascript, также я протестировал его на каком-то онлайн-сайте тестера регулярных выражений, например RegExr , и он работает отлично!

строка: "$1 $2 $3 $5 $7 hello".

результат: ["","$7 ","hello"]

Ожидаемый результат: ["hello"]

вот мои коды: онлайн пример!

function myFunction() {
    var str = "$1 $2 $3 $5 $7 hello";
    var res = str.split(/([$][0-9]+[ ]*)+/gu);
    document.getElementById("demo").innerHTML = res;
}
<p>Click the button to display the array value after the split.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

как я могу это исправить?

Ответы [ 2 ]

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

function myFunction() {
    var str = "$1 $2 $3 $5 $7 hello $5";
    var subst = ``;
    var res= str.replace(/([$][0-9]?.)/gu, subst);
    document.getElementById("demo").innerHTML = res;
}
<p>Click the button to display the array value after the split.</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>
0 голосов
/ 03 декабря 2018

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

Вы можете использовать группу без захвата и впоследствии удалять пустые элементы.:

var str = "$1 $2 $3 $5 $7 hello";
console.log(str.split(/\s*(?:\$\d+\s*)+/).filter(Boolean));

Детали шаблона

  • \s* - 0+ пробелов
  • (?:\$\d+\s*)+ - 1или более вхождений
    • \$ - знак $
    • \d+ - 1+ цифр
    • \s* - 0+ пробелов.

См. Демонстрационную версию regex

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