看看这两个javascript命令:
alert(' test £32 <!-- -->'.replace(/^\s+|[ ><!-]+$/g,''));
alert(' test £32 <!-- -->'.replace(/^\s+|[ <!->]+$/g,''));
第一个运行正常 - 它提醒消息“test £32”,这是我所期望的。但是,第二个产生“test £”。为什么是这样?为什么在 [] 中移动 > 会导致它开始剥离数字?
看看这两个javascript命令:
alert(' test £32 <!-- -->'.replace(/^\s+|[ ><!-]+$/g,''));
alert(' test £32 <!-- -->'.replace(/^\s+|[ <!->]+$/g,''));
第一个运行正常 - 它提醒消息“test £32”,这是我所期望的。但是,第二个产生“test £”。为什么是这样?为什么在 [] 中移动 > 会导致它开始剥离数字?
-
从最后一个地方移动到两者之间!
,>
会产生巨大的变化。具体来说,如果-
不是字符类中指定的第一个或最后一个字符,那么您将有一个类似. 然后该类将匹配所有字符与和之间的代码点。a-b
a
b
Unicode 代码点!
是 U+0021,而代码点>
是 U+003E。中间范围包含许多字符,包括所有数字(这些字符的代码点从 U+0030 到 U+0039)——您可以在此处查看确切列表。因此,字符类最终也会匹配数字。
要解决此问题,请将连字符放在字符类中的最后一个位置(就像在您的第一个示例中一样),或者使用反斜杠对其进行转义以将其视为文字字符:
alert(' test £32 <!-- -->'.replace(/^\s+|[ <!\->]+$/g,''));
-
您必须将to转义\-
为-
在正则表达式中构建一个范围, .
采用
' test £32 <!-- -->'.replace(/^\s+|[ ><!\-]+$/g,'')