请教一个正则问题

var code=" for (var i = 0; i < list; i ++) { "
code.split(/[^\$\w\d]+/)
// (9) ["", "for", "var", "i", "0", "i", "list", "i", ""]

代码如上所示,请问其中的正则该怎么理解,为什么最后能切割出这样的数组?

阅读 3.4k
4 个回答

把连续的,不是 $ 号,也不是数字和字母的其它字符,作为分隔符

\w: 代表A-z 或 a-z 或 _ 或 0-9的其中一个
\$: 代表符号$
\d: 代表0-9
而前面的^可能会让人比较混淆,因为很多时候它是代表以..开头, 但是在这里, 它的意思是, 也就是不是的意思,而后面的+就是代表,前面的表达式匹配的字符,至少有1个或者有多个

所以综上所述: 匹配 不是A-Z或者a-z或者0-9或者_或者$且个数大于等于1的字符, split应该不用说了,就是按照前面的正则来切割

[
^ 非
\$ $符号
\w 或字母
\d 或数字
] 的集合
+ 组成的串

所以你很容易明白了吧,最终分割出来的就是 数字、字母、$符号

边城已经解释了这个正则的作用。
对这个表达式本身做点补充。

  • 方括号内$不必脱出,所以直接写$是可以的。

  • w已经匹配数字,所以d没有必要
    所以可以简化为/[^$\w]+/

如果不考虑$的话,可以直接写作 /\W+/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题