2016-09-05 98 views
0

我想只捕獲匹配部分的區域。我有以下字符串: " type1-class1 type1-class2 type2-class4 type2-type1-class3 " ,我想要下面的結果["class1", "class2"]。 我正在通過type搜索課程。 我曾嘗試以下操作:正則表達式 - Javascript捕獲區域

console.log(" type1-class1 type1-class2 type2-class4 type2-type1-class3 ".match(/\btype1-.*?(?=)/g)) 
 
// Result: ["type1-class1", "type1-class2", "type1-class3"]

而且我已經嘗試以下操作:

console.log(" type1-class1 type1-class2 type2-class4 type2-type1-class3 ".match(/(?= type1-).*?(?=)/g)); 
 
// Result: ["", ""]

如何禁用對正則表達式的開始捕獲?

+1

你是什麼意思'禁用正則表達式開始捕獲? – evolutionxbox

+0

你*有*使用'String#match'而不是'exec'循環嗎? –

+0

因爲我可以使用(?= ...)來匹配而不是捕捉,所以這隻能在匹配的中間/末尾進行,而不是在開始。但是,我想匹配一個字符串,只能得到它的一部分。正如我上面提到的,我想匹配''type1-class1「'並且獲得''class1」'並且在''type1-class2「'上匹配並且獲得'」class2「'。 – archos

回答

4

我會使用exec循環。正則表達式是/(?:^|\s)type1-([^ ]+)/g,例如,「在type-1之後,位於字符串的開頭或緊跟在空白之後,捕獲所有內容,直到下一個空白符或字符串結束爲止(使用給定的字符串,我們不需要^,但我想允許"type1-class1"在字符串的開頭),那麼我們收集捕獲在一個循環:

var rex = /(?:^|\s)type1-([^ ]+)/g; 
 
var str = " type1-class1 type1-class2 type2-class4 type2-type1-class3 "; 
 
var classes = []; 
 
var m; 
 
while ((m = rex.exec(str)) != null) { 
 
    classes.push(m[1]); 
 
} 
 
console.log(classes);

0

這是你期待什麼

console.log(" type1-class1 type1-class2 type2-class4 type2-type1-class3 ".match(/ type1-.*?(?=)/g).map(x=>x.replace(/type1-/g,"").trim())) 
+0

答案不應該是問題,並說*你改變了什麼,*爲什麼*。 –

+0

*「這就是你期待的?」*顯然不是,因爲OP明確表示他/她希望'[「class1」,「class2」]'但上述返回'[「class1」,「class2」,「class3」]' –

+0

但是後處理'map'並不是一個壞的問題,可能值得去補充一下,使之成爲一個有用的答案。 –