Javascript: использование regEx для одновременного изменения более чем одного символа или группы символов

Я знаю, как кодировать довольно простые регулярные выражения, мой вопрос касается изменения более одного символа или символов за раз. Не более одного экземпляра символа или символов, а более одного совпадения символов или символов для разделения значений в одном вызове. заменить.

Например, если я хочу изменить все символы новой строки на ‹br› в тексте из текстовой области, я мог бы написать:

var withoutNewLines = document.getElementById("taInput").value.replace(/\n/g, "<br>");

Если я хочу изменить все пробелы на , я бы закодировал:

var withoutNewLines = document.getElementById("taInput").value.replace(/ /g, "&nbsp;");

Если я хочу изменить оба в одном выражении, я бы закодировал:

var withoutNewLines = document.getElementById("taInput").value.replace(/\n/g, "<br>").replace(/ /g, "&nbsp;");

Мой вопрос:

Есть ли способ закодировать одно регулярное выражение, которое можно было бы использовать для внесения обоих изменений с помощью только одного вызова replace()?


person BobN    schedule 13.05.2013    source источник
comment
Посмотрите документацию MDN для RegExp и метода replace, и вы увидите, что можете использовать | в регулярном выражении действовать как или, и вы можете передать функцию в качестве второго параметра для вызова замены   -  person Ian    schedule 13.05.2013
comment
Для глобальной замены решение Яна работает, но я бы, вероятно, просто запустил два отдельных вызова замены, как в вашем вопросе.   -  person Old Pro    schedule 13.05.2013
comment
@OldPro Я согласен, я просто хотел предоставить то, что, как я думал, они искали :)   -  person Ian    schedule 13.05.2013


Ответы (1)


Это немного ненужно, но вы можете попробовать:

var newStr = "Some string".replace(/o|m/g, function (match) {
    if (match === "o") {
        return "i";
    } else if (match === "m") {
        return "r";
    }
});
console.log(newStr);

Где это заменяет все «о» на «и», а все «м» на «р».

Справка:

person Ian    schedule 13.05.2013
comment
@OldPro Спасибо за ответ. Я думаю, что буду придерживаться нескольких вызовов замены. Я бы опубликовал это для уведомления Яна, но эта чертова программа позволяет уведомлять только одного пользователя в комментариях. Я прокомментирую Ян отдельно. - person BobN; 14.05.2013
comment
@OldPro Спасибо за ответ. Как вы предложили, я думаю, что буду придерживаться нескольких вызовов замены. Я сомневаюсь, что это требует больше процессорного времени, чем использование комбинированной замены с символом ИЛИ. Я бы опубликовал это для уведомления Яна, но эта чертова программа позволяет уведомлять только одного пользователя в комментариях. - person BobN; 14.05.2013