JavaScript表达式和替换规则

时间:2014-02-02 00:13:18

标签: javascript regex replace

我是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

真的需要一个很好的解释,它如何被替换但是存在于表达式中吗?

3 个答案:

答案 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

JS Fiddle demo

正则表达式匹配字符串中任意位置的字符a或(|eo(使用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

JS Fiddle demo

更改后的方法定义了列出时要更改的字符,或者一个范围(例如[a-e],它会找到从ae包含的字符),而不是详细信息使用|运算符的方法。

参考文献:

答案 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);