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

using regular expressions to replace multiple values in a string in javascript

本文关键字:字符串 正则表达式 javascript 替换      更新时间:2023-09-26

我试图同时替换一个变量中的多个字符串值,并将其传递到表单数据中的新值中。

我的最终结果是制作一个非常简单(粗糙)的加密/解密程序。这就是我到目前为止所拥有的。我似乎找不到任何关于从这里去哪里的东西。

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

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

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/.

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

如果我理解正确,您希望将每个"a"都替换为"b",将每个"b"替换为"c",等等,但如果您直接执行此操作(如您的示例中所示),您将从"a"生成的所有"b"最终替换为"c",这不是您想要的。

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

A。用一个特殊字符串替换每个字符

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

例如,您的示例如下:

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

如果您试图将符号的所有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代码,将其增加一,并在fromCharCode函数的帮助下转换回ASCII符号。之后,它将id为"out"的input的值设置为移位后的字符串。示例代码使用jQuery快速访问元素,但一般不需要它。

或者可以使用regexphttp://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);
}

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

我建议你用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!")));