0

我试图使用reg exp从字符串中获取所有功率计算,我尝试了以下代码:

var regex = new RegExp('[0-9]+[^]{1}[0-9]+');
regex.exec('1^2');

这有效并返回 1^2 但是当我尝试使用以下字符串时:

regex.exec('1+1^2');

它返回1+1

4

2 回答 2

6

这是因为[^xyz]意思是“不是 x、y 或 z”。^是字符类 ( [...]) 中的“非”运算符。要解决这个问题,只需转义它(一个反斜杠转义^,另一个转义第一个反斜杠,因为它在字符串中并且它是一个特殊字符):

var regex = new RegExp('[0-9]+[\\^]{1}[0-9]+');

此外,您不需要使用字符类,{1}如果您只有一个字符;这样做:

var regex = new RegExp('[0-9]+\\^[0-9]+');

最后,还有一项改进 - 您可以使用文字正则表达式语法 ( /.../),因此您不需要两个反斜杠:

var regex = /[0-9]+\^[0-9]+/;

小提琴

于 2013-05-17T20:54:45.450 回答
4

[^]在正则表达式中是一个[]被反转的字符类 ( ) ( ^)。例如[^abc]是“任何不是a、b 或 c 的字符”。你需要逃脱克拉:[\^]

同样,{1}是多余的。正则表达式中的任何字符类或单个字符都有隐含{1},因此/a{1}b{1}c{1}/只是一种非常冗长的说法/abc/

同样,单字符字符类也是多余的。/[a]/与 完全相同/a/

于 2013-05-17T20:56:19.187 回答