我知道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支持更强大。

10-05 22:56