我是JS表达式的新手,我的任务要求在表达式中替换 。
使用正则表达式在a上应用以下替换规则 string:
a => 4 e => 3 o => 0
将表达式的结果输出到字符串 'Leet Haxxor”。
我的尝试还可以,或者一英里之外。
pattern = /[a 4] [e 3] [o 0]/;
pattern = /[a > 4] [e > 3] [o > 0]/;
console.log(pattern.test("L33t H4xx0r"));
false
真的需要一个很好的解释,它如何被替换但是存在于表达式中吗?
答案 0 :(得分:3)
我建议:
var replaceWith = {
a: '4',
e: '3',
o: '0',
};
var str = "Leet Haxxor",
output = str.replace(/a|e|o/g, function(char){
return replaceWith[char];
});
console.log(output); // L33t H4xx0r
正则表达式匹配字符串中任意位置的字符a
或(|
)e
或o
(使用g
修饰符/开关后面的字符{正则表达式的结束)。该函数使用找到的字符(char
)从replaceWith
对象中检索替换字符。
正如Felix所说,在评论中,/a|e|o/
确实可以替换为[aeo]
,以便:
var replaceWith = {
a: '4',
e: '3',
o: '0',
};
var str = "Leet Haxxor",
output = str.replace(/[aeo]/g, function(char){
return replaceWith[char];
});
console.log(output); // L33t H4xx0r
更改后的方法定义了列出时要更改的字符,或者一个范围(例如[a-e]
,它会找到从a
到e
包含的字符),而不是详细信息使用|
运算符的方法。
参考文献:
答案 1 :(得分:0)
var trans = {
a: '4',
e: '3',
o: '0',
};
var str = "Leet Haxxor";
var re = new RegExp('[' + Object.keys(trans).join('') + ']', 'g');
// or hard-code it as /[aeo]/g for IE 8 and below
var output = str.replace(re, function (c) {
return trans[c];
});
console.log(output); // "L33t H4xx0r"
现在,您可以在trans
中放置任何内容,并且脚本会自动生成您想要的正则表达式 - 一种更强大/更灵活的解决方案。
答案 2 :(得分:0)
类似于reigns'解决方案:
var str = "Leet Haxxor";
var map = { a: '4', e: '3', o: '0' } //make sure your last name/value is not folowed by a ,
str = str.replace(/[aeo]/g, function(x) {
return (x in map) ? map[x] : x;
});
console.log(str);