84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
取出字串所有括號裡面的內容,括號裡面不能有括號
var str = "dskf(AAA)_8hjk(CCC)dsk(BBB)"; var reg = /(?:\()\w+(?:\))/g; var res = str.match(reg); //["(AAA)", "(CCC)", "(BBB)"]
這樣的到的結果帶有兩邊的括號,不要括號啊?(?:exper) 這不是非獲取匹配麼?
/[^(][a-zA-Z0-9]+(?=\))/g
這樣看下
/(([^()]+))/g
/[^()]+(?=))/g,經過親自測試能滿足題主需求
/[^()]+(?=))/g
match函數的回傳值和使用的正規表示式是不是含有g標誌有關係; 如果沒有g標誌,如果字串匹配,則傳回的結果是一個數組,數組的元素分別是匹配的完整子字串,第一個捕獲型括號的內容,第二個捕獲型括號的內容,第三個捕獲型括號的內容...所以數組的長度是捕獲型括號的數量+1; 如果有g標誌,如果字串匹配,則傳回結果是數組,數組的元素分別是匹配的第一個完整子字串,匹配的第二個完整子字串,匹配的第三個完整子字串...所以數組的長度是匹配的次數; 如果不匹配,返回null;
match
g
匹配的完整子字串
第一個捕獲型括號的內容
第二個捕獲型括號的內容
第三個捕獲型括號的內容
捕獲型括號的數量+1
匹配的第一個完整子字串
匹配的第二個完整子字串
匹配的第三個完整子字串
匹配的次數
所以,使用g以後,結果中返回的只會是匹配的完整子字串,而不會包含捕獲型括號的內容,對於你的需求,match函數應該是做不到的。
這樣看下
雷雷/(([^()]+))/g
/[^()]+(?=))/g
,經過親自測試能滿足題主需求match
函數的回傳值和使用的正規表示式是不是含有g
標誌有關係;如果沒有
g
標誌,如果字串匹配,則傳回的結果是一個數組,數組的元素分別是匹配的完整子字串
,第一個捕獲型括號的內容
,第二個捕獲型括號的內容
,第三個捕獲型括號的內容
...所以數組的長度是捕獲型括號的數量+1
;如果有
g
標誌,如果字串匹配,則傳回結果是數組,數組的元素分別是匹配的第一個完整子字串
,匹配的第二個完整子字串
,匹配的第三個完整子字串
...所以數組的長度是匹配的次數
;如果不匹配,返回null;
所以,使用
g
以後,結果中返回的只會是匹配的完整子字串,而不會包含捕獲型括號的內容,對於你的需求,match函數應該是做不到的。