2011-03-10 64 views
7
re = /\s{1,}(male)\.$/gi 

"A girl is a female, and a boy is a male.".match(re); 

這導致「男性」。Javascript正則表達式匹配捕獲正在返回整個匹配,而不是組

我要的是「男性」

我把男性括號,我雖然會抓住這一點組。

感謝您的幫助

+1

你可以只使用單詞邊界(\ B),而不是\ S {1,}在這個例子中。例如。/\ bmale/- 這會匹配男性而不是女性。 – 2011-03-10 22:44:09

回答

9

你需要拿出 'G' 選項,在您的正則表達式:

re = /\s{1,}(male)\.$/i 

產生

[" male.", "male"] 
+0

雖然它不再是全球性的。第一場比賽將停止。 – Francisc 2011-06-05 21:27:54

+0

雅見第二段: 匹配方法返回的數組有三個屬性,input,index和lastIndex。輸入屬性包含整個搜索的字符串。 index屬性包含完整搜索字符串中匹配子字符串的位置。 lastIndex屬性包含最後一次匹配中最後一個字符後面的位置。 如果未設置全局標誌(g),則數組的元素零包含整個匹配,而元素1到n包含任何子匹配。 如果設置了全局標誌,則元素0到n包含發生的所有匹配。 – 2012-10-09 04:02:58

+0

@Francisc:'g'標誌在你的情況下無關緊要。你的模式包含'$'結束標記,最多會有1個匹配。 – collapsar 2013-07-03 08:47:48

-1

在String.prototype.match()捕獲的組不返回。

如果您需要捕獲組使用RegExp.prototype.exec()。它將返回一個數組,第一個元素將是整個匹配,並且下一個元素將捕獲捕獲組。

var regexObj = /\s{1,}(male)\.$/gi; 

console.log(regexObj.exec('A girl is a female, and a boy is a male.')); 

將輸出:

[' male.', 'male'] // Second element is your capture group

相關問題