這是我的正則表達式:這個正則表達式有什麼問題:/(?:(?:^ | s)hide _([^ s] +))+ /?
/(?:(?:^|\s)hide_([^\s]+))+/
例如,當我有這個字符串:
hide_test sgadsg hide_ asdg hide_some_more asdgasd
應該匹配test
和some_more
。目前,它返回hide_test
和test
。有誰知道這個正則表達式有什麼問題嗎?
這是我的正則表達式:這個正則表達式有什麼問題:/(?:(?:^ | s)hide _([^ s] +))+ /?
/(?:(?:^|\s)hide_([^\s]+))+/
例如,當我有這個字符串:
hide_test sgadsg hide_ asdg hide_some_more asdgasd
應該匹配test
和some_more
。目前,它返回hide_test
和test
。有誰知道這個正則表達式有什麼問題嗎?
沒有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
(忽略捕獲)
如果你想輸出test
和some_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你的正則表達式來簡化它。
謝謝!我怎麼能讓它只返回hide_之後呢? – Jonan
@Jonan,我在答案中加入了這一部分。一探究竟。 – falsetru