我知道SO并不是代码生成器,但是我不知所措,并且会对Regreg感到生气。
我在HTML <input />
中输入了<form />
类型的文本。当用户双击特定列表中的元素时,输入将自动填充。
此事件将生成类似于"[text:number]"
或"[text:number:text]"
的字符串,并将其放置在我的<input />
字段中的光标位置。
该过程的首要目标是构建数学公式结构。我的意思是,生成的括号之间的字符串将插入元素,然后我要允许用户仅将放在数字和运算符中。
我试图绑定(bind)keydown
事件,并使用String.fromCharCode(e.which);
测试char,但是对于键“+”或“-”(以及其他运算符),此函数将返回字母char。没有成功。
然后,我最终决定使用keyup
事件,然后使用RegExp替换<input />
值。
$("#inputID").keyup(function(){
var formule = $(this).val();
var valid_formule = formule.replace(CRAZY_REGEXP,'');
$(this).val(valid_formule);
});
所以,我的问题如下:
如何构造一个JavaScript RegExp,以删除括号之间不是且与
()+-*/,.
和numbers
不同的所有字符。一个例子 :
"a[dse:1]a+a[dse:5]a+a[cat:5:sum]a+(a10a/5,5)!"
会变成"[dse:1]+[dse:5]-[cat:5:sum]+(10/5,5)"
如果您有任何想法,我愿意以另一种方式实现我的目标。
谢谢 !
最佳答案
您可以尝试如下操作:
var re = /[^\]\d\(\)+\-*\/,.]+(?=[^\[\]\(\)]*(?:\[|\(|$))/g;
$("#inputID").keyup(function(){
this.value = this.value.replace(re, "");
});
但是请记住,必须确保括号结构与语法一致。
建议:使用RegExr测试您的正则表达式,但请记住,它比Javascript regex支持更强大。