我具有低于匹配模式不是,()
str = "nums#1#2#3{#4}#5"
其有一种方法可以符合所有#\d+
图案排除卷曲内的那些这个字符串模式括号。
我目前正在通过在匹配前用空字符串替换大括号和所有内容来实现所需的结果。
str = str.replace(/\{[^}]*\}/g, '');
match = str.match(/#\d+/g);
它有没有办法做到这一点在JavaScript正则表达式没有第一个替代?
我具有低于匹配模式不是,()
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"]
(?![^{]*}
是一个数字之后断言负向前查找不匹配之前有}
提前{
的方式是捕获所有你不希望之前,例如:
var result = txt.replace(/((?:{[^}]*}|[^#{]|#(?!\d))*)(#\d+)/g, '$1 number:$2 ');
酷!但我实际上想要一串匹配,并且仍然包含大括号 –
@JustJacob:这不是问题,请使用相同的模式并提取捕获组2(在while循环中使用exec方法即可)。 –
var str = "nums#1#2#3{#4}#5";
var result=str.match(/#\d+(?!})/g);
console.log(result);
,你可以这样写太。
哇!非常感谢。 –