2016-09-05 96 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'并不是一个坏的问题,可能值得去补充一下,使之成为一个有用的答案。 –