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, время: 21:50. |