JS Regex lookbehind not working in firefox and safari

丶灬走出姿态 提交于 2021-02-05 05:50:13

问题


I have this following regex which is working in chrome but causes an error in firefox or safari. I need to modify it to make it work. Can anybody help out a poor soul? Thanks in advance!

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

Basically, I have to match any char in between <tag> and </tag> and need to retain both tags. I used this expression as an argument to array.split.

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

operation: input.split(regex)

output: ["The quick brown ", "<tag>fox</tag>", " jumps over the lazy ", "<tag>dog</tag>"]


回答1:


firefox and safari doesn't have support for lookbehind yet, you can use capture group ( used so that this the pattern on which we are splitting will be also be added in output ) and split on <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))



回答2:


Maybe,

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

would work OK:

Test

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));

If you wish to simplify/modify/explore the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.


RegEx Circuit

jex.im visualizes regular expressions:



来源:https://stackoverflow.com/questions/58460501/js-regex-lookbehind-not-working-in-firefox-and-safari

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!