10 09/2014

正则 .(点) 不包含换行

最后更新: Wed Sep 10 2014 12:37:50 GMT+0800

比如,我想删除 html 中所有的 <style>…</style>,下面哪个正则是对的呢?

正则替换

why?

第一个 .*

. 是除了换行以外的“任意”字符。不包括 \n \r 也就是 \u2028 or \u2029。所以不能替换 带换行的 style

再看二个 [.\r\n]*

似乎没问题 - “任意”+不“任意” = 全部?! 道理没错,写法不对。. 在 [ ] 里面 . 只是匹配自己(就是 . 或者说 点) 下面两段代码(去掉了aaa bbb中间的点)结果一样:

/[.]*/g 或者
/[\.]*/g

正确的写法

[\s\S] 呢? \s 表示空字符,包括 空格 换行 等于 [ \t\r\n](注意:最前面是一个空格!),\S 表示非空字符,除 \s 以外的字符。二者相加等于全部。

(.|[\r\n])* 表示:点 或者 换行(回车)若干个

/r /n 什么地干活

  • \n linefeed 换行 — \r carriage return 回车
  • 在 ascii 码中 \r 13 — \n 10
  • 在 *nix 和 windows 以及各种狗屁标准的混战中 他们各自,甚至一起,用来表示 “嗯,这行完了,该下一行了”