saber 酱的抱枕

Fly me to the moon

05/11
2020
学习

JS 中 exec 和 match 进行正则表达式匹配的区别

设想一下简单的例子:有字符串 abcd,我们使用正则表达式 /\w/g 全局匹配它,应该获取到 a b c d 四个字符串。

正则表达式的 exec 方法和字符串的 match 都可以达到这个目的,但使用方式上有差别。

下面的内容只探讨全局匹配模式的情况(也就是正则表达式后面加了 g 标识)。非全局匹配模式,可以基本认为它们没有差别。

Read More →

JS 中 exec 和 match 进行正则表达式匹配的区别

09/19
2018
学习

JavaScript 转换 CSS 里的长度单位

CSS 的常用长度单位有 px、em、rem、pt 等。今天我遇到一个情况,有两个网站都使用了 rem 作为单位,但是根元素(html)的字号并不相同,需要进行转换。

移植页面的根元素字号是 20px,CSS 规则如:
height: 4rem;

我的根元素字号是 100px,需要除以 5,改成:
height: 0.8rem;

因为需要修改的地方很多,所以我写了个正则来处理。本文的代码并不是一个通用的工具,只是提供了解决思路。

这次的情况是同一种单位之间的转换,有时候我们可能需要进行不同单位之间的转换,思路都是一样的,根据需要修改代码即可。
Read More →

JavaScript 转换 CSS 里的长度单位

08/5
2017
学习

在sql中使用正则表达式

前几天我对数据库进行了一次批量修改,但是今天发现有些地方改出了毛病,需要针对这些地方再进行修改。

什么问题呢?就是内链变成了以“/”开头的链接。问题在于http后面只有一个斜杠,所以要修复这个问题。

但是修复时还有个问题,就是如果直接匹配“/”的话,正常链接的“http://”也会被匹配到。为了避免这种失误,我只好尝试用正则表达式来解决。

我对着教程折腾许久,终于用术语叫做“零宽度负回顾后发断言”的方式达成了目标,累觉不爱。

/{1}+(?!/{1})
// 意思是 匹配“/”,但需要它后面不再有其他斜杠

然后我就去MySQL里用这个正则去查询一下试试:

select post_content from wp_posts where post_content REGEXP '/{1}+(?!/{1})';
// 报错  SQL错误(1139):Got error 'repetition-operator operand invalid' from regexp

emmmmm……上面的语法没错,但是问题在于MySQL对正则表达式的支持很简单,不支持零宽断言,所以悲剧了。所以这篇文章不幸成了反面教材……

后续:
我用了笨办法,先导出数据库,用文本编辑器替换之后再导回去,姑且也算解决了问题(逃

在sql中使用正则表达式

10/25
2016
软件

sublime text 3 使用正则表达式替换空行

sublime text 3 使用正则表达式替换空行

其实就是个\n,我之前没折腾出来,因为我用的是\r\n……

代码段落之间有空行是正常的,但是有时候批量替换什么的,替换完了留下了两行空行,强迫症表示不舒服。可是sublime text 3 又没有提供一键删除空行或多个连续空行的功能,那只好使用正则。

一个\n表示单个换行符。像上图要把两个空行替换成一个空行的话,得用\n\n\n替换成\n\n。

如果在这个正则的末尾使用加号+,代表匹配时要满足最少有多少个连续的换行符。如\n\n\n+代表最少得是3个连续的换行符。

至于用*的话,\n*无疑是匹配所有换行符,但是多个\n如\n\n\n\n*该如何理解我就不清楚了。

\n\n\n\n*可以匹配到如上图的连续3个换行符,\n\n\n\n\n*则不能匹配了。

ps:sublime text 3 里可以选择跨行文本时,是会把换行符显示出来的(类似于上图里每一行后面的小长方形),一开始用还挺不习惯。

sublime text 3 使用正则表达式替换空行