str_replace как в php
Help граждане гуру.
String.prototype.str_replace_all ()
{
if (Array.isArray(arguments[0])) {
for (let i = 0; i < arguments[0].length; i++) {
this.replace(new RegExp(arguments[0][i], "gi"), Array.isArray(arguments[1]) ? arguments[1][i] : arguments[1]));
}
}
}
"one two three for five".str_replace_all(["two", "for"], "|");
А оно не работает. Что не так? |
Вон вверху есть "Аналоги функций PHP", чтоб тебе не писать своих костылей, и в частности str_replace.
А конкретно у тебя не так - всё. Это даже не javascript, на неряшливый набор букв. Синтаксис: 1.String.prototype.str_replace_all () { ... } - такой конструкции в javascript нет. 2.this.replace( ... )); - в конце лишняя скобка. Логика: 1. Чтобы получить результат - функция должна возвращать результат. Отсутствует return. 2. Метод replace не меняет исходную строку. Нет сохранения результата. 3. Строки попадающие в new RegExp должны быть экранированы. Если там попадутся спецсимволы всё упадёт. 4. Нет проверки переданных аргуметов. Стиль: 1. Использование arguments нежелательно, если нужно получить массив входных аргументов используйте ...args. 2. Для именования в javascript принят camelCase, snake_case не рекомендован. |
Цитата:
Надо чтобы реплейсер работал через регулярку. "двенадцать миллиардов триста четырнадцать миллионов четыреста шестьдесят семь"- например в этой строке заменить название разрядов на запятые для разбития на массив. Регулярка нужна для удаления пробелов и вариаций окончаний разрядов. Ну, покажите пример ряшливого кода. может поучусь. :thanks: |
String.prototype.replace_all = function () {
// let args = arguments;
if (Array.isArray(arguments[0]))
{
for (let i in arguments[0]) {
this.replace(new RegExp(arguments[0][i], "gi"), Array.isArray(arguments[1]) ? arguments[1][i] : arguments[1]);
}
}
console.log(arguments);
return this;
}
Изначально она выглядит так. |
Dark Souls,
что на входе, что на выходе? |
Цитата:
("", []) - такого варианта быть не может. на выходе измененная строка. |
Dark Souls,
если не будет служебных символов
String.prototype.str_replace_all = function(arRegexp, str) {
var expr = new RegExp(arRegexp.join("|"), "gi");
return this.replace(expr, str)
}
alert("one two three for five".str_replace_all(["two", "for"], "|"));
|
Dark Souls,
Цитата:
String.prototype.str_replace_all = function(arRegexp, str) {
function escapeRegExp(string){
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
var expr = new RegExp(arRegexp.map(escapeRegExp).join("|"), "gi");
return this.replace(expr, str)
}
alert("one two three for five".str_replace_all(["two", "for"], "|"));
|
Спасибо :thanks:
|
| Часовой пояс GMT +3, время: 23:08. |