我在
下面有这个字符串模式str = "nums#1#2#3{#4}#5"
它有一种方法可以匹配除花括号内的所有#\d+
模式。
我目前正在通过在匹配之前用空字符串替换花括号和所有内容来实现所需的结果。
str = str.replace(/\{[^}]*\}/g, '');
match = str.match(/#\d+/g);
有没有办法在javascript正则表达式中执行此操作而无需首次替换?
答案 0 :(得分:2)
方法是捕捉你以前不想要的所有东西,例如:
var result = txt.replace(/((?:{[^}]*}|[^#{]|#(?!\d))*)(#\d+)/g, '$1 number:$2 ');
答案 1 :(得分:2)
假设{
和}
均衡,您可以使用此否定前瞻来匹配{...}
以内的数字:
var str = "nums#1#2#3{#4}#5";
var arr = str.match(/#\d+(?![^{]*})/g)
console.log(arr)
//=> ["#1", "#2", "#3", "#5"]

(?![^{]*}
是一个负面的预测,在匹配}
{
的数字后断言
答案 2 :(得分:1)
是的,使用这个:(?!{)#\d(?!})
答案 3 :(得分:0)
var str = "nums#1#2#3{#4}#5";
var result=str.match(/#\d+(?!})/g);
console.log(result);
你也可以这样写。