replace массива
Друзья, подскажите как на javascript реализовать аналог следущего php-кода:
str_replace( array( 'а', 'б', 'в' ), array( 'a', 'b', 'v' ), $str ); |
Можно так:
var replace = /абв/; var subject = "абв"; alert(subject.replace(replace, "abv")) А можно и так: function str_replace (search, replace, subject ) { if(!(replace instanceof Array)){ replace=new Array(replace); if(search instanceof Array){ while(search.length>replace.length){ replace[replace.length]=replace[0]; } } } if(!(search instanceof Array))search=new Array(search); while(search.length>replace.length){ replace[replace.length]=''; } if(subject instanceof Array){ for(k in subject){ subject[k]=str_replace(search,replace,subject[k]); } return subject; } for(var k=0; k<search.length; k++){ var i = subject.indexOf(search[k]); while(i>-1){ subject = subject.replace(search[k], replace[k]); i = subject.indexOf(search[k],i); } } return subject; } alert(str_replace('абв ', 'абв', 'abv')); |
Или, например, так. Но для чего все это?
function str_replace(search, replace, string) { // 1. все должно быть массивами search = [].concat(search); replace = [].concat(replace); // 2. выровнять массивы var len = replace.length - search.length; var p_last = search[search.length - 1]; // 2.1. если массив строк поиска короче for (var i = 0; i < len; i++) { search.push(p_last); } // 2.2. если массив строк замены короче for (var i = 0; i < -len; i++) { replace.push(''); } // 3. непосредственная замена var result = string; for (var i = 0; i < search.length; i++) { result = result.split(search[i]).join(replace[i]); } return result; }; var x = 'abc aaa defxyz'; var y = str_replace( ['a', 'b', 'c'], ['x', 'y', 'z'], x); alert([x, y]); |
|
Часовой пояс GMT +3, время: 04:30. |