我有一个javascript的正则表达式的问题。 这是我的正则表达式:Java的正则表达式来javascript正则表达式的问题
(([\+\-\/\*\^]?)([(]*(([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?))[)]*)?(([(]*([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?)[)]*))?([\+\-\/\*\^])([(]*(([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?))[)]*))+
这正则表达式的测试,如果文本是例如matematical公式(18*19)/2
,我可以添加QXX
像一个变量,例如:在完美 Q18/42+7*Q7
这个规则表达式工作java(我已经在http://fiddle.re/dnbh6上测试过它)。但是,当我试图将其转换在JavaScript中,它不工作... 这是所有的解决方案,我想:
var reg =/(([\+\-\/\*\^]?)([(]*(([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?))[)]*)?(([(]*([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?)[)]*))?([\+\-\/\*\^])([(]*(([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?))[)]*))+/g;
reg.test("Q18+aaaa)//return true, but in java this is resturn false
var reg= new RegExp("(([\+\-\/\*\^]?)([(]*(([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?))[)]*)?(([(]*([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?)[)]*))?([\+\-\/\*\^])([(]*(([(]?((([+-]?\d+([.,]?(\d+)?)?)|(Q[0-9]+)?)([e][+-]\d+)?)[)]?)|([(]?value[)]?))[)]*))+", "g");
reg.test("Q18+aaaa)//return true, but in java this is resturn false
所以,如果你有任何想法,我会尝试。
http://regexpal.com/是一个很好的工具来测试正则表达式 – 2013-04-29 13:27:08
保持记住'[(]?... []]?'不能保证所有的括号是成对的,你可以在不关闭的情况下打开,反之亦然,你需要一个PCRE的'(?R)问题](http://stackoverflow.com/questions/4414339/recursive-matching-with-regular-expressions-in-javascript) – 2013-04-29 13:42:07
我希望你生成的正则表达式,而不是它是你的程序中的一个长字符串..我分析了一半并放弃了,但似乎你使用了太多的c适应团体。 – nhahtdh 2013-04-29 13:44:24