Як у глобальному масштабі замінити прокрутку вперед у рядку JavaScript?


130

Як у глобальному масштабі замінити прокрутку вперед у рядку JavaScript?

Відповіді:


256

Виконує наступне, але замінить лише одне виникнення:

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

Для глобальної заміни або якщо ви віддаєте перевагу регулярним виразам, вам просто потрібно уникати косої риси:

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

3
Перший фрагмент не робить глобальної заміни. Не надто впевнений, як зробити глобальну заміну не-регулярним способом.
BoltClock

Ну правда, я не пробував це з більш ніж косою рисою. Це можна зробити за допомогою, "string".replace('/', 'ForwardSlash', 'g')але це нестандартний аргумент, який працює лише у afaik Firefox.
Seldaek

1
"string".replace(/\//g, 'ForwardSlash');працює, але видаліть / g з цього, і він не працює.
Johnt podjeter

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);

7

Без використання регулярного вираження (хоча я б це зробив лише у випадку, якщо пошуковий рядок є вводом користувача):

var str = 'Hello/ world/ this has two slashes!';
alert(str.split('/').join(',')); // alerts 'Hello, world, this has two slashes!' 


4

Це працювало для мене, перетворюючись "//"на справедливе "/".

str.replace(/\/\//g, '/');

2

Вам потрібно обернути нахил наперед, щоб уникнути проблем із веб-переглядачем чи // коментуванням.

str = 'this/that and/if';

var newstr = str.replace(/[/]/g, 'ForwardSlash');

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, використовуючи розумніший підсвічування синтаксису. Не покладайтеся на кольори редактора коду, але вірите в потужність сильних аналізаторів, які належним чином токенізують ваш код під час виконання.
солетан

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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.