2

我正在使用这个正则表达式 -[^\s\da-zA-ZåäöÅÄÖ]+$过滤掉除 AZ, 0-9 plus the Swedish characters 之外的任何内容ÅÄÖ。只要字符串不以空格结尾,它就可以按预期工作,而且我有点困惑我需要正确的东西才能使其接受字符串,即使它们以空格结尾。有,\s但显然还不够。

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

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


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

2 回答 2

2

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

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

如果您确实想在字符串中保留空格并且只在最后删除它们,请使用

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

结果:

something with whitespace
于 2012-10-19T11:28:27.820 回答
2

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

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

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

于 2012-10-19T11:29:26.163 回答