2014-02-18 149 views

回答

3

沒有g標誌,它只返回第一個匹配。

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/ 
) 
// => ["hide_test", "test"] 

設置g標誌會給你所有的比賽,(所有匹配的字符串):

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/g 
) 
// => ["hide_test", " hide_some_more"] 

hide_後只得到部分,你需要後期處理的返回值。

例如,使用map額外的更換:

'hide_test sgadsg hide_ asdg hide_some_more asdgasd'.match(
    /(?:(?:^|\s)hide_([^\s]+))+/g 
).map(function(match) { 
    return match.replace(/^\s*hide_/, ''); 
}) 

BTW,正則表達式可以簡化爲:/(\bhide_\S+)+/g(忽略捕獲)

+0

謝謝!我怎麼能讓它只返回hide_之後呢? – Jonan

+0

@Jonan,我在答案中加入了這一部分。一探究竟。 – falsetru

2

如果你想輸出testsome_more,你需要使用.exec和一個循環:

var regex = /(?:\bhide_(\S+))+/g; 
var s = 'hide_test sgadsg hide_ asdg hide_some_more asdgasd'; 
var match, matches=[]; 

while ((match=regex.exec(s)) !== null) { 
    matches.push(match[1]); 
} 

alert(matches); 

我也chan ged你的正則表達式來簡化它。

相關問題