У меня положительный взгляд на ошибку Safari - PullRequest
1 голос
/ 28 мая 2020

Привет, ребята, у меня небольшая проблема с Regex, которая не работает в сафари.

Это проблема:

Title = "Level 5 All programmes"

Я пытаюсь разделить это с помощью положительного просмотра назад, чтобы сохраните число в первом элементе массива следующим образом:

Title.split(/(?<=[0-9])/)

И я получаю

["Level 5", " all specialisation"]

Что хорошо, но проблема в том, что это решение не работает в Safari.

Вы, ребята, знаете, как решить эту проблему?

1 Ответ

1 голос
/ 28 мая 2020

Вы можете сопоставить и захватить части с помощью /(.*?\d+)(\s.*)/ regex:

var Title = "Level 5 All programmes";
var rx = /(.*?\d+)(\s.*)/;
var m = Title.match(rx);
if (m) {
  console.log("First part: '" + m[1] + "'\nSecond part: '"+ m[2] + "'");
}

Регулярное выражение /(.*?\d+)(\s.*)/ соответствует

  • (.*?\d+) - Группа 1: любой ноль или более символов, кроме символов разрыва строки, как минимум возможно, а затем 1+ цифр
  • (\s.*) - Группа 2: пробельный символ, за которым следует любой ноль или более символов, кроме символов разрыва строки, как можно больше.

Для соответствия по строкам замените . на [^] или [\s\S].

Для случаев, когда нет второй части, сделайте вторую группу необязательной, а при получении соответствия проверьте, не соответствует ли значение группы 2 undefined:

var Title = "Level 5";
var rx = /(.*?\d+)(\s.*)?/;
var m = Title.match(rx);
if (m) {
  console.log("First part: '" + m[1] + "'");
  if (m[2] !== undefined) console.log("Second part: '"+ m[2] + "'");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...