匹配模式不在一组开始和结束字符中,例如{},()

时间:2017-04-13 21:24:57

标签: javascript regex

我在

下面有这个字符串模式
str = "nums#1#2#3{#4}#5"

它有一种方法可以匹配除花括号内的所有#\d+模式。

我目前正在通过在匹配之前用空字符串替换花括号和所有内容来实现所需的结果。

str = str.replace(/\{[^}]*\}/g, '');
match = str.match(/#\d+/g);

有没有办法在javascript正则表达式中执行此操作而无需首次替换?

4 个答案:

答案 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(?!})

Demo

答案 3 :(得分:0)

var str = "nums#1#2#3{#4}#5";
var result=str.match(/#\d+(?!})/g);
console.log(result);

你也可以这样写。