JS Regex не работает в Firefox и Safari - PullRequest
2 голосов
/ 19 октября 2019

У меня есть следующее регулярное выражение, которое работает в Chrome, но вызывает ошибку в Firefox или Safari. Мне нужно изменить его, чтобы он работал. Кто-нибудь может помочь бедной душе? Заранее спасибо!

регулярное выражение: /(?=<tag>)(.*?)(?<=<\/tag>)/

По сути, я должен сопоставить любой символ в диапазоне от <tag> до </tag> и сохранить оба тега. Я использовал это выражение в качестве аргумента для array.split.

input: "The quick brown <tag>fox</tag> jumps over the lazy <tag>dog</tag>"

операция: input.split (regex)

выход: ["The quick brown ", "<tag>fox</tag>", " jumps over the lazy ", "<tag>dog</tag>"]

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

firefox и safari пока не поддерживают поддержку lookbehind, вы можете использовать группу захвата (используется так, чтобы этот шаблон, на который мы делим, также были добавлены в вывод) и разделить на <tag> </tag>

let str = "The quick brown <tag>fox</tag> jumps over the lazy <tag>dog</tag>"

let regex = /(<tag>.*?<\/tag>)/

console.log(str.split(regex).filter(Boolean))
0 голосов
/ 19 октября 2019

Может быть,

<tag>.*?<\/tag>|[^<>]+

будет работать нормально:

Тест

function regularExpression(regex, str) {
	let m, arr = [];
	while ((m = regex.exec(str)) !== null) {
		// This is necessary to avoid infinite loops with zero-width matches
		if (m.index === regex.lastIndex) {
			regex.lastIndex++;
		}


		m.forEach((match, groupIndex) => {
			arr.push(match.trim());
			console.log(`Found match, group ${groupIndex}: ${match}`);
		});
	}
	return arr;
}

const expression = /<tag>.*?<\/tag>|[^<>]+/g;
const string = 'The quick brown <tag>fox</tag> jumps over the lazy <tag>dog</tag>';

console.log(regularExpression(expression, string));

Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

...