Если вы пытаетесь сопоставить любую из нескольких альтернативных подстрок и предоставлять разные результаты для каждого совпадения, вам придется использовать функцию (как вы, кажется, делаете).Например:
var str = "ABCDE";
str = str.replace(/A|B|C|D/g, function(match) {
var rv;
switch (match)
{
case 'A':
rv = '1';
break;
case 'B':
rv = '2';
break;
case 'C':
rv = '3';
break;
case 'D':
rv = '4';
break;
}
return rv;
});
alert(str); // Alerts 1234E
(Конечно, этот конкретный пример лучше выполнить как поиск по массиву.)
Если вы изверг с вертикальной краткостью (я нет, нонекоторые из них), вы можете использовать ранние возвраты:
str = str.replace(/A|B|C|D/g, function(match) {
switch (match)
{
case 'A': return '1';
case 'B': return '2';
case 'C': return '3';
case 'D': return '4';
}
});
alert(str); // Alerts 1234E
Редактировать Просто чтобы прояснить мой комментарий «поиск по массиву» выше: Если замены действительно являются просто статическим поиском,Вы можете сделать это:
var str, replacements, key, rex;
// Potentially one-time prep, if you're re-using this lookup
replacements = {
"A": "1",
"B": "2",
"C": "3",
"D": "4"
};
rex = [];
for (key in replacements)
{
rex.push(key);
}
rex = new RegExp(rex.join('|'), "g");
// The bit you reuse
str = "ABCDE";
str = str.replace(rex, function(match) {
return replacements[match];
});
alert(str); // Alerts 1234E
..., поскольку объекты JavaScript являются ассоциативными массивами.