!
すべての文字列をラップされた関数に置き換えて、正規表現を使用してこれを行うにはどうすればよいですか?
例:
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)
!
すべての文字列をラップされた関数に置き換えて、正規表現を使用してこれを行うにはどうすればよいですか?
例:
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)
あなたの例を考えると、正規表現はまったく必要ありません。
var s = "3!"; //for example
if (s[s.length-1] === "!")
s = "fact(" + s.substr(0, s.length-1) + ")";
最後のケースで括弧を2倍にしない場合は、別のテストが必要です。
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) + ")";
}
これは、opが要求したとおりです。正規表現の使用:
"3*(2+1)!".replace(/([1-9\.\(\)\*\+\^\-]+)/igm,"fact($1)");
二重括弧で終わる可能性があります:
"(2+1)!".replace(/([1-9\.\(\)\*\+\^\-]+)/igm,"fact($1)");
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 />");
}
"(sqrt(2)+2/2^2)!".replace(/(.*)!/g, "fact($1)");
(.*)!
以下の正規表現に一致し、その一致を後方参照番号1にキャプチャします(.*)
.
*
!
私が見つけた私自身の答えは次のとおりです。
Number.prototype.fact = function(n) {return fact(this,2)}
str = str.replace(/[\d|\d.\d]+/g, function(n) {return "(" + n + ")"}).replace(/\!/g, ".fact()")
しかし、私は他の答えがはるかに良いかもしれないかどうかを確認します、彼らはそうだと思います