JavaScript正则表达式中的“单个空格字符”

43

我正在学习 JavaScript 并分析现有代码。

在我的 JS 参考书中,它说要搜索单个空格使用 "\s"?

但是我遇到了这段代码:

obj.match(/Kobe Bryant/);

它使用实际的空格而非\s,为什么这不会产生错误?


MDN RegExp页面是JS正则表达式和处理RegExp对象的好资源:https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RegExp - user23987
5个回答

88
字符类 \s 不仅包含空格字符,还包括其他Unicode 空白字符\s 相当于这个字符类:
[\t\n\v\f\r \u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]

3
+1,可能花费你比其他人更长的时间来获取链接 :-) (翻译:加1,可能你获取链接的时间比其他人更长 :-)) - Andy E
3
对于任何编码数据的人来说,考虑“真正的空格符' '和'任何可能发送给我的空白字符'之间的区别是非常重要的。\s几乎总是您想要的,但要小心......如果您正在编码二进制数据,请确保仅匹配“空格键” \u0020 - Ajax
链接已失效,请您更新一下好吗?我非常感兴趣,谢谢。 - Krisztián Balla

16

不是的。在正则表达式中包含一个字面上的空格是完全合法的。

然而,它并不等同于\s\s将包括任何空白字符,包括制表符、不间断空格、半角空格和其他字符,而一个字面上的空格只能匹配普通空格字符。


10

\s匹配任何空白字符,包括制表符等。当然,您也可以使用文字空格而不会出现问题。就像您可以使用[0-9]代替\d表示任何数字一样。但是,请记住,[0-9]等同于\d,而文字空格是\s的子集。


4

除了普通空格外,\s还匹配不同类型的空白字符,包括制表符(根据配置可能还包括换行符)。尽管如此,在您想要匹配通常由普通空格分隔的名称的情况下,使用普通空格进行匹配肯定是有效的。


0

\xA0 也是一个空格,尤其是一个不换行的空格。 我们在使用记事本++复制粘贴带有空格的纯文本时遇到了Quill Editor的问题。 JS中的空格 \xA0 是一个空格,但与常规空格 \u0020 (' ') 不匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接