10
09/2014
正则 .(点) 不包含换行
比如,我想删除 html 中所有的 <style>…</style>,下面哪个正则是对的呢?
- /<style.*<\/style>/g
- /<style[.\r\n]*<\/style>/g
- /<style(.|[\r\n])*<\/style>/g
- /<style[\s\S]*<\/style>/g
正则替换
why?
第一个 .*
. 是除了换行以外的“任意”字符。不包括 \n \r 也就是 \u2028 or \u2029。所以不能替换 带换行的 style
再看二个 [.\r\n]*
似乎没问题 - “任意”+不“任意” = 全部?! 道理没错,写法不对。. 在 [ ] 里面 . 只是匹配自己(就是 . 或者说 点) 下面两段代码(去掉了aaa bbb中间的点)结果一样:
正确的写法
[\s\S] 呢? \s 表示空字符,包括 空格 换行 等于 [ \t\r\n](注意:最前面是一个空格!),\S 表示非空字符,除 \s 以外的字符。二者相加等于全部。
(.|[\r\n])* 表示:点 或者 换行(回车)若干个
/r /n 什么地干活
- \n linefeed 换行 — \r carriage return 回车
- 在 ascii 码中 \r 13 — \n 10
- 在 *nix 和 windows 以及各种狗屁标准的混战中 他们各自,甚至一起,用来表示 “嗯,这行完了,该下一行了”