Mozilla Firefox не воспринимает Lookbehind Регулярное Выражение

131
11 января 2021, 06:40

Имеется регклярное выражение:

/(?<=")[^"]*(?=")|(?<=')[^']*(?=')/g

Которое Chrome воспринимает без каких-либо проблем, в то время как Mozilla Firefox выдёт ошибку:

SyntaxError: invalid regexp group

Сначала подумал, что Mozilla не умеет в Lookaround и чтобы удостовериться подёргал консольку в DevTool'е Firefox. Однако регулярки типа lookahead:

/(?=Something...)/

Воспринимает нормально, в то время как на регулярки lookbehind:

/(?<=Something...)/

Не хочет кушать ни в какую. То ли Mozilla ещё не допилила поддержку Lookaround, то ли это я, кодообезьяна, пишу кривые регулярки.

Answer 1

Используйте группы захвата с методом RegExp#exec(String) в цикле:

var s = "Строки \"Результат 1\" и 'Результат 2'"; 
var reg = /"([^"]*)"|'([^']*)'/g; 
var results=[], m; 
while (m=reg.exec(s)) { 
  results.push(m[1] || m[2]); 
} 
console.log(results);

Можно воспользоваться тем, что мы знаем, что с обеих сторон будут ненужные нам кавычки и упростить код до

var s = "Строки \"Результат 1\" и 'Результат 2'"; 
var reg = /"([^"]*)"|'([^']*)'/g; 
var results= s.match(reg).map(function(x) { return x.substr(1, x.length-2); }); 
console.log(results);

READ ALSO
Загрузить xml при помощи js

Загрузить xml при помощи js

Нужно сделать так, чтобы можно было при помощи взять информацию из файла, который я выберу, а не заранее указывать в коде

102
Анимация при появлении в DOM

Анимация при появлении в DOM

Как в vuejs сделать анимацию при появлении блока в dom

109
Почему async/await работает корректно, хотя ему не передаются коллбэки

Почему async/await работает корректно, хотя ему не передаются коллбэки

Пытаюсь разобраться в промисах и async/awaitНашёл на хабре этот пример:

107
Нумерация абзацев JS

Нумерация абзацев JS

Как пронумеровать все абзацы страницы и добавить номер ПЕРЕД текстом абзацев, а не после ?

103