JavaScript - 如何将某些字符串中的字符串替换为函数

时间:2013-03-19 13:55:07

标签: javascript regex replace

如何使用正则表达式执行此操作,将!替换为包含在函数中的每个字符串:

示例:

  • 3! => fact(3)

  • 2.321! => fact(2.321)

  • (3.2+1)! => fact(3.2+1)

  • (sqrt(2)+2/2^2)! => fact(sqrt(2)+2/2^2)

5 个答案:

答案 0 :(得分:1)

根据您的示例,您根本不需要正则表达式:

var s = "3!"; //for example

if (s[s.length-1] === "!")
    s = "fact(" + s.substr(0, s.length-1) + ")";

最后一个案例的括号不加倍只需要另一个测试:

var s = "(sqrt(2)+2/2^2)!"; //for example

if (s[s.length-1] === "!") {
    if(s.length > 1 && s[0] === "(" && s[s.length-2] === ")") 
        s = "fact" + s.substr(0, s.length-1);
    else
        s = "fact(" + s.substr(0, s.length-1) + ")";
}

答案 1 :(得分:0)

var testArr =  [];
testArr.push("3!");
testArr.push("2.321!");
testArr.push("(3.2+1)!");
testArr.push("(sqrt(2)+2/2^2)!");

//Have some fun with the name. Why not?
function ohIsThatAFact(str) {
    if (str.slice(-1)==="!") {
         str = str.replace("!","");
         if(str[0]==="(" && str.slice(-1)===")") 
             str = "fact"+str;
         else 
             str = "fact("+str+")";
    }
    return str;
}

for (var i = 0; i < testArr.length; i++) {
    var testCase = ohIsThatAFact(testArr[i]);
    document.write(testCase + "<br />");
}

Fiddle example

答案 2 :(得分:0)

"(sqrt(2)+2/2^2)!".replace(/(.*)!/g, "fact($1)");

Fiddle with it!

(.*)!

  • 匹配下面的正则表达式并将其匹配捕获到反向引用号1 (.*)

    • 匹配任何非换行符.
    • 的单个字符
    • 在零和无限次之间,尽可能多次,根据需要回馈(贪婪)*
  • 将字符“!”字面匹配!

答案 3 :(得分:0)

我刚才发现的答案是:

Number.prototype.fact = function(n) {return fact(this,2)}
str = str.replace(/[\d|\d.\d]+/g, function(n) {return "(" + n + ")"}).replace(/\!/g, ".fact()")

但我会看看其他答案是否会好得多,认为它们是

答案 4 :(得分:0)

这是op所要求的;使用正则表达式:

"3*(2+1)!".replace(/([1-9\.\(\)\*\+\^\-]+)/igm,"fact($1)");

你可能会得到双括号:

"(2+1)!".replace(/([1-9\.\(\)\*\+\^\-]+)/igm,"fact($1)");