当字符串以空格结尾时,为什么我的正则表达式不起作用?

时间:2012-10-19 11:26:51

标签: javascript regex whitespace

我正在使用此正则表达式 - [^\s\da-zA-ZåäöÅÄÖ]+$来过滤除A-Z,0-9以及瑞典字符ÅÄÖ之外的任何内容。只要字符串没有以空格结尾,它就会按预期工作,我对我需要正确的东西感到有点困惑,即使它们以空格结尾也能接受字符串。 \s在那里,但显然还不够。

我的正则表达式有什么问题?

"something #¤%&/()=?".replace(/[^\s\da-zA-ZåäöÅÄÖ]+$/, '') # => a string


"something ending with whitespace #¤%&/()=? ".replace(/[^\s\da-zA-ZåäöÅÄÖ]+$/, '')# => a string ending with space #¤%&/()=? 

2 个答案:

答案 0 :(得分:2)

您正在使用否定的字符类(“空格,数字,字母等”),因此您的正则表达式无法匹配。

从中删除\s,以及$(将匹配与字符串末尾联系起来),它应该有效。

如果您确实想在字符串中保留空格并且仅在结尾处删除它们,请使用

"something with whitespace #¤%&/()=? ".replace(/[^\s\da-zA-ZåäöÅÄÖ]+|\s+$/g, '')

结果:

something with whitespace

答案 1 :(得分:2)

你的正则表达式说:“在以下范围内匹配的一个或多个字符实例,后跟字符串结尾”。这实质上意味着你的正则表达式只匹配出现在字符串末尾的不允许字符序列。由于您的测试字符串以空格结束,这是您的逻辑所允许的,因此字符串末尾没有出现“不允许的字符序列”,因此正则表达式与任何内容都不匹配。

如果从正则表达式的末尾删除$并使用g标志使其全局替换空字符串中不在指定字符范围内的任何内容,则可以实现所需的过滤。

如果您还想修剪尾随空格,最好使用其他正则表达式或更简单的trimRight调用。