下面有这个字符串模式
str = "nums#1#2#3{#4}#5"
有一种方法可以匹配所有 #\d+
模式,但不包括花括号内的模式。
我目前通过在匹配之前用空字符串替换大括号和所有包含它们的内容来实现预期的结果。
str = str.replace(/\{[^}]*\}/g, '');
match = str.match(/#\d+/g);
有没有办法在 javascript 正则表达式中做到这一点而无需第一次替换?
最佳答案
假设 {
和 }
是平衡的,您可以使用这种否定先行来匹配不在 {...}
内的数字:
var str = "nums#1#2#3{#4}#5";
var arr = str.match(/#\d+(?![^{]*})/g)
console.log(arr)
//=> ["#1", "#2", "#3", "#5"]
(?![^{]*}
是一个否定前瞻,它在一个数字之后断言我们在匹配 {
关于javascript - 匹配不在一组开始和结束字符内的模式,例如 {}、(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43401949/