|
/*jslint browser: true, vars: true, white: true, maxerr: 50, indent: 4 */
(function (console)
{
"use strict";
function transform(string)
{
var questionMark = string.indexOf("?");
var colon = string.indexOf(":", questionMark);
if (questionMark === -1 || colon === -1)
{
return string;
}
var condition = string.substring(0, questionMark);
var expressions = string.substring(questionMark + 1, string.length);
var trueExpression = null;
var falseExpression = null;
console.log("expressions: " + expressions);
// While looking in pairs, find the location where the colon occurs before the question mark.
questionMark = expressions.indexOf("?");
colon = expressions.indexOf(":");
while ((questionMark !== -1 && colon !== -1) && (questionMark < colon))
{
questionMark = expressions.indexOf("?", questionMark + 1);
colon = expressions.indexOf(":", colon + 1);
}
console.log("\t" + "questionMark: " + questionMark);
console.log("\t" + "colon: " + colon);
trueExpression = expressions.substring(0, colon);
falseExpression = expressions.substring(colon + 1, expressions.length);
console.log("condition: " + condition);
console.log("trueExpression: " + trueExpression);
console.log("falseExpression: " + falseExpression);
console.log("-");
return ("if (" + condition + ") {\n" + transform(trueExpression) + "\n} else {\n" + transform(falseExpression) + "\n}");
}
function unittest()
{
console.log(transform("(i < 0 ? function1() : function2())"));
console.log("---");
console.log(transform("i < 0 ? function1() : function2()"));
console.log("---");
console.log(transform("i < 0 ? function1() : i === 0 ? function2() : function3()"));
console.log("---");
console.log(transform("i > 0 ? i === 1 ? function1() : function2() : function3()"));
console.log("---");
console.log(transform("i > 0 ? i === 1 ? function1() : i === 2 ? function2() : function3() : function4()"));
console.log("---");
console.log(transform("i > 0 ? i === 1 ? function1() : i === 2 ? function2() : function3() : i === 0 ? function4() : function5()"));
console.log("---");
console.log(transform("要处理的代码"));
}
unittest();
}(window.console));
复制上面代码到chrome的console中,填入自己要转的代码,回车即可得到结果。
|
|