Заменить несколько символов в одном вызове на замену
Очень простой вопрос, но я не совсем понимаю, как это сделать.
Мне нужно заменить каждый экземпляр "_" пробелом, и каждый экземпляр "#" не имеет ничего/пустого.
var string = '#Please send_an_information_pack_to_the_following_address:';
Я пробовал это:
string.replace('#','').replace('_', ' ');
Я действительно не связываю такие команды, но есть ли другой способ сделать это в одном?
Ответы
Ответ 1
Используйте оператор OR (|
):
var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"
Вы также можете использовать класс символов:
str.replace(/[#_]/g,'');
Если вы хотите заменить хэш на одну вещь, а символ подчеркивания - на другой, вам просто нужно будет цепочки. Однако вы можете добавить прототип:
String.prototype.allReplace = function(obj) {
var retStr = this;
for (var x in obj) {
retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
}
return retStr;
};
console.log('aabbaabbcc'.allReplace({'a': 'h', 'b': 'o'}));
// console.log 'hhoohhoocc';
Почему бы не цеплять? Я не вижу в этом ничего плохого.
Ответ 2
Цепочка крута, зачем ее отклонять?
В любом случае, вот еще один вариант в одной замене:
string.replace(/#|_/g,function(match) {return (match=="#")?"":" ";})
Заменить будет выбрать ", если match ==" # "," " if not.
[Обновить] Для более общего решения вы можете сохранить ваши заменяющие строки в объекте:
var replaceChars={ "#":"" , "_":" " };
string.replace(/#|_/g,function(match) {return replaceChars[match];})
Ответ 3
Укажите флаг /g
(глобальный) в регулярном выражении, чтобы заменить все совпадения вместо первого:
string.replace(/_/g, ' ').replace(/#/g, '')
Чтобы заменить один символ на одну вещь и другой символ на что-то еще, вы не можете обойтись, требуя двух отдельных вызовов replace
. Вы можете абстрагировать его на функцию, как это делал Doorknob, хотя, вероятно, мне понадобится объект с старыми/новыми как пары ключ/значение вместо плоского массива.
Ответ 4
Если вы хотите заменить несколько символов, вы можете вызвать String.prototype.replace()
с аргументом замены, являющимся функцией, которая String.prototype.replace()
для каждого совпадения. Все, что вам нужно, это объект, представляющий сопоставление символов, которое вы будете использовать в этой функции.
Например, если вы хотите заменены a
x
, b
с y
и c
с z
, вы можете сделать что - то вроде этого:
var chars = {'a':'x','b':'y','c':'z'};
var s = '234abc567bbbbac';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
Выход: 234xyz567yyyyxz
Ответ 5
Вы также можете попробовать следующее:
function replaceStr(str, find, replace) {
for (var i = 0; i < find.length; i++) {
str = str.replace(new RegExp(find[i], 'gi'), replace[i]);
}
return str;
}
var text = "#here_is_the_one#";
var find = ["#","_"];
var replace = ['',' '];
text = replaceStr(text, find, replace);
console.log(text);
find
ссылается на текст, который будет найден, и replace
на текст, который нужно заменить на
Это будет замена символов, нечувствительных к регистру. Чтобы сделать иначе, просто измените флаги Regex по мере необходимости. Например: для чувствительной к регистру замены:
new RegExp(find[i], 'g')
Ответ 6
Вы можете просто попробовать это:
str.replace(/[.#]/g, 'replacechar');
это заменит., - и # на ваш replacechar!
Ответ 7
Пожалуйста, попробуй:
-
заменить несколько строк
var str = "http://www.abc.xyz.com"; str = str.replace(/http:|www|.com/g, '');//str is "//.abc.xyz"
-
заменить несколько символов
var str = "abcd,e,f,g,h"; str = str.replace(/[.,]/g, '');//str is "abcdefgh";
Удачи!
Ответ 8
Вы также можете передать объект RegExp методу replace, например
var regexUnderscore = new RegExp("_", "g"); //indicates global match
var regexHash = new RegExp("#", "g");
string.replace(regexHash, "").replace(regexUnderscore, " ");
Javascript RegExp
Ответ 9
Вот простой способ сделать это без RegEx.
Вы можете прототип и/или кешировать вещи по своему желанию.
// Example: translate( 'faded', 'abcdef', '123456' ) returns '61454'
function translate( s, sFrom, sTo ){
for ( var out = '', i = 0; i < s.length; i++ ){
out += sTo.charAt( sFrom.indexOf( s.charAt(i) ));
}
return out;
}
Ответ 10
yourstring = '#Please send_an_information_pack_to_the_following_address:';
замените '#' на '' и замените '_' пробелом
var newstring1 = yourstring.split('#').join('');
var newstring2 = newstring1.split('_').join(' ');
newstring2 - ваш результат
Ответ 11
Я не знаю, насколько это поможет, но я хотел удалить <b>
и </b>
из моей строки
поэтому я использовал
mystring.replace('<b>',' ').replace('</b>','');
так что, в принципе, если вы хотите уменьшить количество персонажей и не тратить время, это будет полезно.
Ответ 12
Вот еще одна версия с использованием String Prototype. Наслаждайтесь!
String.prototype.replaceAll = function(obj) {
let finalString = '';
let word = this;
for (let each of word){
for (const o in obj){
const value = obj[o];
if (each == o){
each = value;
}
}
finalString += each;
}
return finalString;
};
'abc'.replaceAll({'a':'x', 'b':'y'}); //"xyc"
Ответ 13
Вот функция "безопасного HTML", использующая функцию множественной замены "уменьшить" (эта функция применяет каждую замену ко всей строке, поэтому зависимости между заменами значительны).
// Test:
document.write(SafeHTML('<div>\n\
x</div>'));
function SafeHTML(str)
{
const replacements = [
{'&':'&'},
{'<':'<'},
{'>':'>'},
{'"':'"'},
{"'":'''},
{''':'`'},
{'\n':'<br>'},
{' ':' '}
];
return replaceManyStr(replacements,str);
} // HTMLToSafeHTML
function replaceManyStr(replacements,str)
{
return replacements.reduce((accum,t) => accum.replace(new RegExp(Object.keys(t)[0],'g'),t[Object.keys(t)[0]]),str);
}