我具有低於匹配模式不是,()
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);
,你可以這樣寫太。
哇!非常感謝。 –