JavaScript split () с использованием общего символа, затем join () с использованием различных символов - PullRequest
0 голосов
/ 14 мая 2018

Если у меня есть строка: /someFolder/anotherFolder/fileName, и я хочу заменить все косые черты на "+", тогда это будет работать:

var someString = '/someFolder/anotherFolder/fileName'
someString.split('/').join('+');

Или с помощью регулярных выражений,это сработало бы:

var someString = '/someFolder/anotherFolder/fileName'
someString.replace(/\//g, "+");

Но что было бы лучшим подходом, если бы я хотел заменить первое вхождение на «+», а затем второе вхождение на другой символ, такой как, скажем, «-»третье с '*' и т. д., так что строка someString выше возвращает:

+someFolder-anotherFolder*fileName

Ответы [ 4 ]

0 голосов
/ 01 января 2019

Вы можете связать несколько вызовов String#replace() метода с литеральной строкой в ​​качестве аргумента поиска для достижения того, что вам нужно:

var someString = '/someFolder/anotherFolder/fileName';
console.log(someString.replace('/', '+').replace('/', '-').replace('/', '*'));

Дело в том, что аргумент поиска без регулярных выражений позволяет ему находить только вхождение first , и поскольку у вас есть три разные замещающие строки (+, - и *) использовать регулярное выражение не совсем удобно / просто.

0 голосов
/ 14 мая 2018

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

var someString = '/someFolder/anotherFolder/fileName'

console.log(someString.replace(/\//g, (i => _ => "+-*"[i++])(0)));
0 голосов
/ 14 мая 2018

Вы можете использовать метод reduce, передав стрелку функции как argument.

var someString = '/someFolder/anotherFolder/fileName'
someString = someString.split('/').slice(1).reduce((str, item, index) => str + "+-*"[index] + item, "");
console.log(someString);
0 голосов
/ 14 мая 2018

Вы можете передать функцию на replace():

let someString = "/someFolder/anotherFolder/file";
const repl = [ '+', '-', '*' ];
let i = 0;
console.log(someString.replace(/\//g, (match) => repl[(i++) % repl.length]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...