[英]Format text with javascript from right to left using regular expressions
我有特定的内置功能,管理员可以通过网站执行这些功能。 为了简单起见,我们假设只有2个函数:
1) func1 "requires 2 paramters"
2) func2 "requires 3 paramters"
所以我有一个文本框,用户可以在其中输入以下内容: 我使用';' 分开参数
func1 x; y; // func1(x,y) is more understandable. func1 takes two parameters
要么
func2 1; 2+2; 4; // note that func2 takes 3 parameters...
甚至更复杂的嵌套函数,例如;
func2 x; func1 a; b; ; z ; // for example in this example 1st parameter = x
2nd parameter = func1 a; b; // note this is a function
3rd parameter = z
借助jquery,我可以利用它的智能/自动完成功能来确保我正确输入了功能名称。
我想通知用户是否缺少在每个函数上传递参数的功能。
例如,如果用户键入:
func2 x; y;
那么我想告诉他func2缺少参数。
我知道问题出在如果用户键入以下内容:
func2 x; func1 a; b; ; z ;
我设法用C#解决了这个问题。 这很容易。 我这样做的方法是开始从右到左查找功能。 因此,如果这样做,我将找到的第一个功能是func1对吗? 那么我会更正确,直到找到两个;如果替换func2 x; <temp> ; z ;
它,我将得到: func2 x; <temp> ; z ;
func2 x; <temp> ; z ;
注意我替换了func1 a; b;
func1 a; b;
然后我可以继续做同样的事情,然后找到func2并选择直到3rd;
问题是,如果我创建常规表达式,我将不知道如何从右向左看。 如果我要像默认值一样从左向右看,那么func2的第一个参数= x,第二个参数= func1 a,第三个参数= b。 事实并非如此。 另一方面,如果我从右到左开始做同样的事情,那么一切都会顺利进行。
那么困难的部分是从右到左? 使用分割正则表达式然后反转
var valid_functions = ["func1","func2"]
var valid_params = [4,1]
var f_regex = new RegExp("\\b("+valid_functions.join("|")+")\\b");
var f_data = "func2 x; func1 a; b; ; z ;".split(f_regex).reverse();
for(var i=0;i<f_data.length;i+=2){
if(f_data[i] === ""){continue}
var f_name = f_data[i+1],
f_params = f_data[i];
var pos = valid_functions.indexOf(f_name);
if( f_params.split(";").length-1 !== valid_params[pos]){
alert("Wrong number of arguments for " + f_name)
}
}
参数数量不正确的函数示例: http : //jsfiddle.net/tHcYM/1/
您不能以可靠的方式为此使用正则表达式。 正则表达式是正则语言。 您已经引入了上下文相关性,这意味着从最严格的意义上讲您的语言不再是“常规的”。
您应该能够将c#代码移植到javascript。 您在c#中使用的JS遗漏了哪些字符串操作函数,使您认为应该在js中使用正则表达式?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.