Javascript用正则表达式拆分字符串然后加入它

时间:2017-11-29 18:43:36

标签: javascript regex split

嘿我想要一个可以分割字符串的函数,例如"(12/x+3)*heyo",我可以自己编辑每个数字,字母和单词,然后返回编辑后的版本。到目前为止,我得到了这个(不能按预期工作):

function calculate(input){
    var vars = input.split(/[+-/*()]/);
    var operations = input.split(/[^+-/*()]/);
    var output = "";

    vars = vars.map(x=>{
        return x+"1";
    });

    for(var i=0; i<operations.length; i++){
        output += operations[i]+""+((vars[i])?vars[i]:"");
    }
    return output;
}

例如:(12/x+3)*heyo返回:(1121/x1+31)*1heyo1但应返回(121/x1+31)*heyo1

3 个答案:

答案 0 :(得分:3)

您可以使用regexreplace方法执行此任务:

&#13;
&#13;
var s = "(12/x+3)*heyo";

console.log(
  s.replace(/([a-zA-Z0-9]+)/g, "$1" + 1)
)
&#13;
&#13;
&#13;

根据您要匹配的字符,您可能需要/([^-+/*()]+)/g作为模式:

&#13;
&#13;
var s = "(12/x+3)*heyo";

console.log(
  s.replace(/([^-+/*()]+)/g, "$1" + 1)
)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

看起来vars数组中填充了空结果,无意中添加了“1”。我稍微修改了你的箭头函数来检查x的值。

vars = vars.map(x=>{
    if (x) {
       return x+"1";
    }
});

答案 2 :(得分:0)

它可以简化一点(但\w也匹配下划线[a-zA-Z0-9_]):

&#13;
&#13;
console.log( '(12/x+3)*heyo'.replace(/\w+/g, '$&1') )

console.log( '(12/x+3)*heyo'.replace(/\w+/g, m => m + 1) )
&#13;
&#13;
&#13;