我正在尝试用相应的值替换不同的设置字符。例如每个<用#U34替换,每个$替换为#89。
我有一个字符串数组,随机抛出这些字符。例如:
var arr = [
'uisdhfu<',
'u$$fd<'
]
到目前为止,我发现我能做到:
var replace = /</ig;
var newString = textWithCharacters.replace(replace, '#U34');
但这似乎只能一次为一个角色完成。如果我想做多个,我似乎每次都需要创建一个新的字符串。有没有办法一次性完成这项工作?也许有循环和if语句?但我似乎无法弄清楚如何定义循环的条件。
答案 0 :(得分:7)
.replace()
方法接受第二个参数的函数,该函数传递匹配的字符串(例如'<'
),并返回替换文本(例如'#U34'
)。
所以,你可以这样做:
var replacementMap = {
'<': '#U34',
'$': ')#89'
}
// Create a RegExp to match any of the characters that are used as keys in the map.
// For this example, this RegExp is the same as /[<$]/gi
// Note: this method of creating a RegExp may not work with certain characters such
// as -, ], or \
var replaceRegex = new RegExp('[' + Object.keys(replacementMap).join('') + ']', 'ig');
function getReplacementString(input) {
return replacementMap[input];
}
var newString = textWithCharacters.replace(replaceRegex, getReplacementString);
答案 1 :(得分:1)
您可以拥有要替换的字符列表,然后将函数传递给replace方法,以便将匹配替换为正确的映射。像这样:
var arr = [
'uisdhfu<',
'u$$fd<'
];
var mapping = {
"$":")#89",
"<":"#U34",
};
var regex = new RegExp(Object.keys(mapping).map((key)=>"\\"+key).join("|"),"g");
var results = arr.map((string)=>string.replace(regex,(match)=>mapping[match]));
console.log(results);
&#13;
答案 2 :(得分:0)
您可以使用以下许多字符:(使用regex)
.replace(/(x|y|z)/, '')
答案 3 :(得分:0)
你想要这样的东西(运行片段并查看console.log)
此处是HTML编号列表:http://www.ascii.cl/htmlcodes.htm
玩得开心:)
var array = ['#!toto','&#(i u%','$mpo*+'];
var symbol = [' ','!','"','#','$','%','&',"'",'(',')','*','+',',','etc...'];
console.log(array);
for(var i = 0; i < array.length ; i++){
var temp = '';
for(var j = 0; j < array[i].length ; j++){
var index = symbol.indexOf(array[i][j]);
if(index != -1){
temp = temp + '&#'+(32+index);
}
else{
temp = temp + array[i][j];
}
}
array[i] = temp;
}
console.log(array)
&#13;