0

看看这两个javascript命令:

alert(' test £32 <!-- -->'.replace(/^\s+|[ ><!-]+$/g,''));

alert(' test £32 <!-- -->'.replace(/^\s+|[ <!->]+$/g,''));

第一个运行正常 - 它提醒消息“test £32”,这是我所期望的。但是,第二个产生“test £”。为什么是这样?为什么在 [] 中移动 > 会导致它开始剥离数字?

4

2 回答 2

0

-从最后一个地方移动到两者之间!>会产生巨大的变化。具体来说,如果-不是字符类指定的第一个或最后一个字符,那么您将有一个类似. 然后该类将匹配所有字符与和之间的代码点a-bab

Unicode 代码点!是 U+0021,而代码点>是 U+003E。中间范围包含许多字符,包括所有数字(这些字符的代码点从 U+0030 到 U+0039)——您可以在此处查看确切列表。因此,字符类最终也会匹配数字。

要解决此问题,请将连字符放在字符类中的最后一个位置(就像在您的第一个示例中一样),或者使用反斜杠对其进行转义以将其视为文字字符:

alert(' test £32 <!-- -->'.replace(/^\s+|[ <!\->]+$/g,''));
于 2013-01-24T11:01:31.073 回答
0

-您必须将to转义\--在正则表达式中构建一个范围, .

采用

' test £32 <!-- -->'.replace(/^\s+|[ ><!\-]+$/g,'')
于 2013-01-24T11:03:25.667 回答