最近,在学习的过程中难免总是碰到一些正则表达式。尤其是在书写构建工具的配置文件的时候。所以,特意花时间学习了一番。怕忘记,一博文,留记忆。
正则表达式有2种写法。 一种是javascript语言风格的,一种是Perl语言风格。如下:
var re = new RegExp('a','i'); //javascript风格
var re2 = /a/i; //Perl风格
在webpack glup fis3的配置文件中,几乎全部都是Perl风格。
一、字符类。
随便书写一段字符串,然后匹配当中的adc字符。并将他们改成 "换"。
var str = '12dajs k43f lksd 433';
alert(str.replace(/[adc]/g,'换'));
结果如图:
字符串里面所有的abc都被改成了 “换”。
这里 [ ]的意思就是匹配 括号里面的内容。 /g 表示的是全局匹配。
var str = '12dajs k43f lksd 433';
alert(str.replace(/[^adc]/g,'换'));
可以看到字符串里面除的adc都被改成了 “换”。当然这里没有c。
这里 ^的意思就是匹配括号以外的内容。
var str = '12dajs k43f lksd 433';
alert(str.replace(/./g,'换'));
当我把匹配规则改成了 . 字符串里面所有的东西都被替换了,其中包括空格部分
. 所代表的意思就是 除换行符和其他终止符之外的任意字符
var str = '12dajs k43f lksd 433';
alert(str.replace(/\w/g,'换'));
将匹配规格改成了 \w 这就就把字符串里面的非空格部分 全部替换了。
\w 是个转义的字符 它代表了a-zA-Z0-9 相当于[a-zA-Z0-9]
有/w 。就有/W (前面的小写,后面的大写) 将匹配格式改成/W 的话,就会如下图。
很明显看到 空格部分全部被替换了。
\W 代表了除了 a-zA-Z0-9以外的字符。相当于[^a-zA-Z0-9]
接下来,我就不上图了。直接给出 规则代表的意思。 有兴趣的同学,可以自己试验一边。当然我也会放一些源码到自己的GitHub上面。
\s 代表空白字符 。\S代表非空白字符 (tips:与\w的意义是不同的) \d 代表数字(等价于[0-9])\D代表非数字以外的任何字符([^0-9])
[\b] 退格直接量
二、重复字符语法。
1、{n,m} 匹配前一项最少出现n次,最多出现m次
2、{n,} 匹配前一项最少出现n次,多则不限
3、{n} 匹配前一项出现n次。
4、?匹配前一项出现0次或者1次,简单说:就是前一项可有可无。与{0,1}同样的意义
5、+ 匹配前一项出现1次或者多次,等价于{1,} 个人理解就是若干。
6、* 匹配前一项0次或者多次,等价于{0,}
个人感觉 * 和 . 这两个匹配字符,还是少用较好 。 因为 /a*/g 是可以匹配到bbb的字符 。 /./g 能匹配到太多字符 有点类似css里面 * 号,有点通配符的意思。感觉用多了会出事。当然大神自便。
三、正则修饰符。
前面我们可以看到 每个正则后面都加了/g 。 g---global的缩写 代表着全局匹配。否则正则匹配到第一个就不执行了。
/i i--ignore的缩写 代表着 忽略大小写。
/m m--multiple 代表多行匹配。
四、最后说一点。
因为正则匹配一段字符的时候,只要字符中间有满足的部分 就会返回true 。比如:匹配 java字符串 /java/g 如果这样写的话 javascript也会满足 匹配规则。
为了避免误会,所以 有了^ 和 $ 。 ^表示行首 $表示行尾 /^java$/g 。这样javascript就不会被匹配到! 如下代码:
var str = 'javascript';
var re = /java/;
var re2 = /^java$/;
alert(re.test(str)) //true
alert(re2.test(str)) //false
其实关于正则的教程还有很多。我只是总结了一些常用的。有兴趣的童鞋可以翻看 大犀牛 的第10章。
下一篇 我将 做几个实例demo! 谢谢!