2015-05-22 29 views
0

比方說,我有這樣的字符串:爲什麼匹配返回整個字符串作爲數組中的第一個元素?

'1234*321*123'

我想每一組數字作爲數組中的元素。

所以我用這個:

'1234*321*123'.match(/^(\d{4})\*(\d{3})\*(\d{3})$/); 

但是,這回["1234*321*123", "1234", "321", "123"],當我期待["1234", "321", "123"]

爲什麼如果只有數字組包含在捕獲組中,那麼match是否會返回整個字符串作爲數組的第一個元素?

回答

3

零點元素總是完全匹配。第一個元素是第一個捕獲,第二個元素是第二個捕獲等。如果您只想要沒有完全匹配的所有捕獲,則可以使用result.slice(1)

如果你問「爲什麼是第一要素全場比賽?」

  • 這只是方式match的作品。
  • 它平行$0$1$2 ...中老年語言。
+1

簡明扼要的答案... – NemoStein

+1

+1這是一個古老的約定,但它仍然有用:它使得匹配對象更易於調試,打印時更具信息性 – slezica

0

當您使用()的匹配,它提供了兩種具體的組件和完整的字符串。爲了您的理想效果,請使用:

'1234*321*123'.match(/\d+/g); 
+0

它擁有一切跟'()'。你的評論意味着''1234 * 321 * 123'.match(/ \ d + /);'仍然會返回完整的字符串作爲匹配的一部分,但它不會。使用全局標誌只是獲得所需輸出的一種方式。 –

+0

'.match(/ \ d + /)'* does *返回完整匹配(我從來沒有說過「完整的字符串」,而是「完全匹配」)。它不會返回任何其他內容。 (意外刪除我以前的評論,我聲稱這與'()'無關,但與'/ g',其中'.match'不給出捕獲,只有完全匹配) – Amadan

+0

你在哪裏運行它生產那個? Chrome控制檯爲''1234 * 321 * 123'.match(/ \ d + /)'提供'[「1234」]'。編輯:好吧,我想我們正在談論同樣的事情/在吸管上採摘 –

相關問題