2012-01-16 69 views
6

我需要搜索所有街道縮寫的輸入值,並用適當的後綴替換。這是我迄今爲止:jQuery查找並替換爲數組

jQuery('#colCenterAddress').val(function(i,val) { 
    var f = ['Rd','St','Ave']; 
    var r = ['Road','Street','Avenue']; 
    return val.replace(f,r); 
}); 

想法?

+2

這在PHP中工作,但不幸的是不在JavaScript中。 – 2012-01-16 14:35:33

+0

這不是一個有效的javascript調用替換。這不是特別國際化。這是客戶端的工作,很容易規避。您需要確保每個匹配都以空格開頭,並由一個非單詞字符繼承。 – 2012-01-16 14:36:32

回答

11

您需要迭代f數組,然後單獨嘗試每個替換。

jQuery('#colCenterAddress').val(function(i,val) { 
    var f = ['Rd','St','Ave']; 
    var r = ['Road','Street','Avenue']; 
    $.each(f,function(i,v) { 
     val = val.replace(new RegExp('\\b' + v + '\\b', 'g'),r[i]); 
    }); 
    return val; 
}); 

DEMO:http://jsfiddle.net/vRTNt/


如果這是你要定期做一些事情,你可能想存儲陣列,甚至使具有第三排預製的正則表達式。

var f = ['Rd','St','Ave']; 
var r = ['Road','Street','Avenue']; 

var re = $.map(f, function(v,i) { 
    return new RegExp('\\b' + v + '\\b', 'g'); 
}); 

jQuery('#colCenterAddress').val(function(i,val) { 
    $.each(f,function(i,v) { 
     val = val.replace(re[i],r[i]); 
    }); 
    return val; 
}); 

DEMO:http://jsfiddle.net/vRTNt/1/

0
var valArray = val.split(" "); 

for(x = 0; x < valArray.length; x++){ 
    for(y = 0; y < r.length; y ++){ 
     if (valArray[x] == f[y]){ 
      valArray[x] = r[y]; 
     } 
    } 
} 
return valArray 

你總是可以在陣列變回一個字符串返回,如果你喜歡。

演示:http://jsfiddle.net/vRTNt/12/

0

的一種方式做到這一點,是通過val弦圈,如果你看到f陣列中的一個字,以其r陣列對口更換。

jQuery('#colCenterAddress').val(function(i,val) { 
    var f = ['Rd','St','Ave']; 
    var r = ['Road','Street','Avenue']; 
    var valArray = val.split(' '); 
    $.each(valArray, function(i,v){ 
     var inF = $.inArray(v, f); 
     if(inF !== -1){ 
     valArray[i] = v.replace(f[inF], r[inF]); 
     } 
    }); 
    return valArray.join(' '); 
});