嘿我想要一个可以分割字符串的函数,例如"(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
答案 0 :(得分:3)
您可以使用regex
和replace
方法执行此任务:
var s = "(12/x+3)*heyo";
console.log(
s.replace(/([a-zA-Z0-9]+)/g, "$1" + 1)
)
&#13;
根据您要匹配的字符,您可能需要/([^-+/*()]+)/g
作为模式:
var s = "(12/x+3)*heyo";
console.log(
s.replace(/([^-+/*()]+)/g, "$1" + 1)
)
&#13;
答案 1 :(得分:0)
看起来vars数组中填充了空结果,无意中添加了“1”。我稍微修改了你的箭头函数来检查x的值。
vars = vars.map(x=>{
if (x) {
return x+"1";
}
});
答案 2 :(得分:0)
它可以简化一点(但\w
也匹配下划线[a-zA-Z0-9_]
):
console.log( '(12/x+3)*heyo'.replace(/\w+/g, '$&1') )
console.log( '(12/x+3)*heyo'.replace(/\w+/g, m => m + 1) )
&#13;