Как глобально заменить косую черту в строке JavaScript?

131

Как глобально заменить косую черту в строке JavaScript?

Бабикер
источник

Ответы:

257

Следующее подойдет, но заменит только одно вхождение:

"string".replace('/', 'ForwardSlash');

Для глобальной замены или если вы предпочитаете регулярные выражения, вам просто нужно избегать косой черты:

"string".replace(/\//g, 'ForwardSlash');
Seldaek
источник
3
Первый фрагмент не выполняет глобальной замены. Не слишком уверен, как сделать глобальную замену способом без регулярного выражения.
BoltClock
Ах да, я не пробовал больше, чем косую черту. Это можно сделать, "string".replace('/', 'ForwardSlash', 'g')но это нестандартный аргумент, который работает только в Firefox afaik.
Seldaek
1
"string".replace(/\//g, 'ForwardSlash');работает, но удалите / g из этого, и это не сработает.
johntrepreneur
1
@johntrepreneur g указывает, что это глобальная замена, т. е. заменяет все экземпляры найденного /. Без g он заменяет только один экземпляр. И если вы удалите, /gвы полностью нарушите регулярное выражение, поскольку последний / является конечным разделителем.
Seldaek
1
@RameshRajendran таков и API ... по умолчанию он заменяет только один раз, а затем останавливается, когда находит тот, который нужно заменить. См. Также developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Seldaek
27

Используйте литерал регулярного выражения с gмодификатором и избегайте косой черты с помощью обратной косой черты, чтобы она не конфликтовала с разделителями.

var str = 'some // slashes', replacement = '';
var replaced = str.replace(/\//g, replacement);
BoltClock
источник
7

Без использования регулярного выражения (хотя я бы сделал это только в том случае, если строка поиска вводится пользователем):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 
PleaseStand
источник
4

Это то, что вы хотите?

'string with / in it'.replace(/\//g, '\\');
тсуга
источник
4

Это сработало для меня, превратившись "//"в справедливость "/".

str.replace(/\/\//g, '/');
Marty
источник
2

Вам нужно обернуть косую черту, чтобы избежать проблем с // перекрестным браузером или комментариев.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');
Baz
источник
1

Привет, небольшая поправка в приведенном выше скрипте .. выше скрипт пропускает первый символ при отображении вывода.

function stripSlashes(x)
{
var y = "";
for(i = 0; i < x.length; i++)
{
    if(x.charAt(i) == "/")
    {
        y += "";
    }
    else
    {
        y+= x.charAt(i);
    }
}
return y;   
}
Виней
источник
0
var str = '/questions'; // input: "/questions"
while(str.indexOf('/') != -1){
   str = str.replace('/', 'http://stackoverflow.com/');
}
alert(str); // output: "http://stackoverflow.com/questions"

Предлагаемое регулярное выражение /\//gне сработало для меня; остальная часть строки ( //g, replacement);) была закомментирована.

Кристофер Линкольн
источник
1
Обратите внимание, что я не уверен, как производительность этого сравнивается с предлагаемым решением разделения / объединения массивов.
Кристофер Линкольн,
... наткнулся на это ... попробуйте другую IDE, используя более умную подсветку синтаксиса. Не полагайтесь на цвета вашего редактора кода, но верьте в мощь парсеров с отслеживанием состояния, правильно токенизирующих ваш код во время выполнения.
soletan
0

Это идея Кристофера Линкольна, но с правильным кодом:

function replace(str,find,replace){
    if (find != ""){
        str = str.toString();
        var aStr = str.split(find);
        for(var i = 0; i < aStr.length; i++) {
            if (i > 0){
                str = str + replace + aStr[i];
            }else{
                str = aStr[i];
            }
        }
    }
    return str;
}

Пример использования:

var somevariable = replace('//\\\/\/sdfas/\/\/\\\////','\/sdf','replacethis\');

Замена глобальной строки Javascript чрезмерно сложна. Эта функция решает эту проблему. Вероятно, это небольшое влияние на производительность, но я уверен, что оно незначительное.

Вот альтернативная функция, выглядит намного чище, но в среднем на 25-20 процентов медленнее, чем указанная выше функция:

function replace(str,find,replace){
    if (find !== ""){
        str = str.toString().split(find).join(replace);
    }
    return str;
}
Джефф Луйет
источник
-1

Вы можете создать RegExpобъект, чтобы сделать его более читабельным

str.replace(new RegExp('/'), 'foobar');

Если вы хотите заменить их все, добавьте "g"флаг

str.replace(new RegExp('/', 'g'), 'foobar');
rioV8
источник