2017-04-17 146 views
3

我有一個字符串包含我的名字christiancattano和正則表達式搜索模式定義爲這樣Regex101和JS正則表達式搜索出不同的結果

/(cattano|cattan|attano|chris|catta|attan|ttano|chri|hris|catt|atta|ttan|tano|chr|hri|ris|cat|att|tta|tan|ano)+/ig 

在regex101如果我進入最上面一欄我的搜索模式,並進入逐字,christiancattano進入測試字符串框,它將高亮chriscattano。這是我期待的行爲。

在我的javascript代碼,如果我運行下面的行

var regExPattern: string = '(cattano|cattan|attano|chris|catta|attan|ttano|chri|hris|catt|atta|ttan|tano|chr|hri|ris|cat|att|tta|tan|ano)+'; 

var regExObj: RegExp = new RegExp(regExPattern, 'g'); 

var match: string[] = regExObj.exec('christiancattano'); 

console.log(`match: ${match}`); 

我收到此輸出

match: chris,chris 

爲什麼是它regex101顯示了我的比賽是我所期望的,chriscattano,但我的Javascript代碼產生了不同的結果?

+3

使用'match':''christiancattano'.match(regExObj)' –

+3

在Javascript中,當你執行使用'g'修飾符的RegExp,它一次只返回一個匹配。你必須在循環中調用它來獲得所有的匹配。刪除修飾符。 – Barmar

+0

@WiktorStribiżew我的男人!你又做到了!非常感謝!我剛剛閱讀了string.match()和regex.exec()之間的區別,並且我看到我在嘗試獲取匹配項的字符串[]時出錯。今天再次感謝您的幫助! – Chris

回答

2

RegExp#exec()只返回單個匹配對象,即使您使用帶有g修飾符的正則表達式。

您可以用正則表達式使用String#matchg修飾符來獲取所有匹配值:

var match: string[] = 'christiancattano'.match(regExObj)