JavaScript без регулярных выражений заменить - PullRequest
10 голосов
/ 14 ноября 2008

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

Например, я хочу заменить "@!#$123=%" и не хочу беспокоиться о том, какие символы убежать. Кажется, что в большинстве языков есть оба способа замены. Я хотел бы видеть эту простую вещь добавленной.

Ответы [ 3 ]

22 голосов
/ 14 ноября 2008

Возможно, я неправильно понял ваш вопрос, но в javascript есть replace()

var string = '@!#$123=%';
var newstring = string.replace('@!#$123=%', 'hi');

edit : (см. Комментарии) 5-е издание, похоже, содержит в себе эту информацию, хотя она не отображается, когда я ссылаюсь непосредственно на нее. вот соответствующая часть:

Метод replace () выполняет операцию поиска и замены. Он принимает регулярное выражение в качестве первого аргумента и строку замены в качестве второго аргумента. Он ищет строку, по которой он вызывается для совпадений с указанным шаблоном. Если регулярное выражение имеет установленный флаг g, метод replace () заменяет все совпадения в строке строкой замены; в противном случае он заменяет только первое найденное совпадение. Если первый аргумент replace () является строкой, а не регулярным выражением, метод ищет эту строку буквально, а не преобразовывает ее в регулярное выражение с помощью конструктора RegExp (), как search ().

14 голосов
/ 17 июля 2011

У меня была точно такая же проблема при поиске не-регулярного выражения javascript string replace (). Моим решением было использовать комбинацию split () и join ():

"some text containing regex interpreted characters: $1.00".split("$").join("£");

, что дает:

"некоторый текст, содержащий символы, интерпретируемые регулярным выражением: £ 1,00"

сравнить с replace ():

"some text containing regex interpreted characters: $1.00".replace(new RegExp("$"),"£")

что странно дает:

"некоторый текст, содержащий символы, интерпретируемые регулярным выражением: $ 1.00 £"

3 голосов
/ 07 сентября 2013

Попробуйте это:

function replaceAllTemp(str,find, replace) { 
var ignoreCase=true;
var _token;
var token=find;
var newToken=replace;
var i = -1;

if ( typeof token === "string" ) {

    if ( ignoreCase ) {

        _token = token.toLowerCase();

        while( (
            i = str.toLowerCase().indexOf(
                token, i >= 0 ? i + newToken.length : 0
            ) ) !== -1
        ) {
            str = str.substring( 0, i ) +
                newToken +
                str.substring( i + token.length );
        }

    } else {
        return this.split( token ).join( newToken );
    }

}
return str;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...