2012-09-01 33 views
0
var text = "Price: 123 dollar." 
text.replace(/((\d+\.?\d+?)|(\d{1,3}(\,\d{3})+)) *([a-zA-Z]+)/, function(a,b,c){ 
document.write(a+" | "+b+" | "+c); 
return; 
} 

現在輸出結果是:123 dollar | 123 | 123Regex中的一個錯誤

但我需要的輸出是:123元| 123 |美元

它的工作原理與正則表達式/\b((?:\d+.)?\d+)*([A-ZA-Z] +)/

想不通出來..爲什麼b和c是相同的?!

修復:將溶液以除去不必要的捕捉組:

/(( \ d + \ d +)|(:???? \ d {1,3}( \,\ d {3})+))*([A-ZA-Z] +)/

由於@Mythril和@cababunga

+0

'/(\d+\.?\d+?|\d{1,3}(?:\,\d{3})+) *([A-ZA-Z] +)/' – nhahtdh

+0

你可以僅僅刪除分組像什麼,我在上面的意見建議 - 在分組有沒有意義。 – nhahtdh

回答

1

因爲你創建更多個捕獲基團。這意味着更多的參數,以替換功能,試試這個:

var text = "Price: 123 dollar." 
text.replace(/((\d+\.?\d+?)|(\d{1,3}(\,\d{3})+)) *([a-zA-Z]+)/, function(a,b,c,d,e,f){ 
    document.write(a+" | "+b+" | "+f);} 
); 
+0

明白了..不知道如何刪除不必要的捕獲組? – Igor

+2

如果你只需要groupping,使用(:)'((\ d + \ \ d +)|(\ d {1,3}(\,\ d {3})+))'???? – cababunga