使用正则表达式替换javascript中字符串中的多个值

时间:2012-02-05 06:09:49

标签: javascript html regex

我正在尝试从一个变量中一次替换多个字符串值,并将其从表单数据传递给新变量。

我的最终结果是制作一个非常简单(粗略)的加密\解密程序。 这就是我到目前为止所拥有的。我似乎无法找到从这里去的地方。

function testResults (form) {
    var TestVar = form.inputbox.value;
    var NewVar = TestVar.replace(/a/g, "b").replace(/b/g, "c");
    alert ("Replaced text: " + NewVar);
}

4 个答案:

答案 0 :(得分:1)

如果我理解正确,你想用'b'替换每个'a',用'c'等替换每个'b',但是如果你直接这样做(如你的例子中那样),你就得到了所有' b'从'a'生成,最后用'c'替换,这不是你想要的。

也许你可以分两个阶段工作:

一个。用特殊字符串

替换每个字符

B中。用加密替换每个特殊字符串。

例如,您的示例将如下所示:

var TempVar = TestVar.replace(/a/g, "{{{a}}}").replace(/b/g, "{{{b}}}");
var NewVar  = TempVar.replace(/{{{a}}}/g, "b").replace(/{{{b}}}/g, "c");

答案 1 :(得分:1)

如果您尝试将符号的所有ascii代码移动一个,那么您尝试执行此操作并不是很好。请查看此代码http://jsfiddle.net/AHgZq/

$('#in').keyup(function(){
  var val = $(this).val(), newval = '';
    for(var i=0; i<val.length; i++)
    {
        newval += String.fromCharCode(val.charCodeAt(i)+1);
    }
  $('#out').val(newval);  
});

在输入中输入id ='in'的任何字母上,它取整个字符串,取其中的每个字母。获取函数charCodeAt的ASCII代码,将其增加1并在fromCharCode函数的帮助下转换回ASCII符号。之后,它将id ='out'的输入值设置为该移位的字符串。示例代码使用jQuery来快速访问元素,但一般不需要它。

或者你可以用regexp来做 http://jsfiddle.net/8sMvg/1/

$('#in').keyup(function(){
  var val = $(this).val(), newval = ''; 
  newval = val.replace(/(\w)/g,
          function(match,group){ 
                       return String.fromCharCode(match.charCodeAt(0)+1);
           }); 
  $('#out').val(newval);  
});

关于你的代码,它看起来像

function testResults (form) {
    var TestVar = form.inputbox.value;
    var NewVar = TestVar.replace(/(\w)/g,
              function(match){ 
                  return String.fromCharCode(match.charCodeAt(0)+1);
               }); 
    alert ("Replaced text: " + NewVar);
}

答案 2 :(得分:1)

我认为正则表达式不是混淆算法的正确方法。您应该使用自己的代码算法来操作字符串,而不是使用正则表达式。这是一个简单的方法,可以将字符串中的每个字符增加一个值,就像您尝试使用正则表达式一样:

function testResults (form) {
    var input = form.inputbox.value;
    var output = [];
    for (var i = 0; i < input.length; i++) {
        output[i] = String.fromCharCode(input.charCodeAt(i) + 1);
    }
    output = output.join("");
    alert ("Replaced text: " + output);
}

您可以在此处查看示例:http://jsfiddle.net/jfriend00/LYnAV/

仅供参考,请不要将此加密称为加密,因为它不是加密。它是模糊的(以非安全的方式模糊原始值)。

答案 3 :(得分:1)

如果你想换字母,你不应该用这种方式替换。

我建议您this方式:

function shift(str, num) {
    var res = "";

    for (var i = 0; i < str.length; i++) {
        str = str.toUpperCase();
        var ch = str.charAt(i);
        if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(ch) != -1) {
            var code = str.charCodeAt(i);
            var shiftedCode = 'A'.charCodeAt() + (code - 'A'.charCodeAt() + num) % ('Z'.charCodeAt() - 'A'.charCodeAt() + 1);
            res += String.fromCharCode(shiftedCode);
        } else {
            res += ch;
        }
    }

    return res;    
}

function encStr(str) {
    return shift(str, 1);
}

function decStr(str) {
    return shift(str, 25);
}

alert(decStr(encStr("this string is encrypted and decrypted correctly!")));