最近用到了正则校验,之前也写过,这次需求不一样,所以又遇到了很多写法上的问题,感觉这么写是没问题的,但是页面上又没有生效,也确实很难受啊,所以现在问题解决后,认为还是有必要整理一下正则的问题!
正则的写法
1.第一种方式是直接通过
/正则表达式/
写出来(正则表达式符号)
正则表达式符号为
"/ /"
,即为2个斜杠,中间为匹配规则。JavaScript中类似的特殊符号还有数组“[]”, 对象“{}”。
var re1 = /ABC\001/;
re1;
/ABC\001/.test('ABC\001');
/ABC\001/.test('ABC001');
2.第二种方式是通过new RegExp('正则表达式')
创建一个RegExp对象
两种写法是一样的,不过这里值得注意的是--------------------------------------------
注意里面的\\
,第一个是转义字符,作用是将第二个转为普通字符,所以正则里面实际只匹配一个\
var re2 = new RegExp('ABC\\001');
re2;
/ABC\001/.test('ABC\001');
/ABC\001/.test('ABC001');
3.比较两种方式
var re1 = /ABC\001/
var re2 = new RegExp('ABC\\001')
使用正则表达式符号创建的正则是没有引号的,意味着这样的创建方法,我们没有办法写模板字符串,也就不能动态的书写我们想要的正则表达式,如果想要动态的正则表达式,只能是通过第二种方式,创建RegExp对象。例如:
var num = 3
const reg =new RegExp(`[^\\d-]*(\\d*(?:\\.\\d{0,${num}})?).*$`, 'g')
e.target.value = e.target.value.replace(reg, '$1')
第二种方式对比第一种的话,正则表达式里面是多了个转义字符,这也就是值得我们注意的地方,只要是正则表达式中有特殊字符,我们想把特殊字符当作普通字符来用的话,就需要转义。转义字符也就是\
。比如我们想要找到一个点号 .
,要将特殊字符用作常规字符,请在其前面加上反斜杠:\.
,其他的字符根据情况转义。
4.正则表达式中需要转义的字符(字符问题)
特殊字符:这些字符在正则表达式中有特殊的含义,例如 [ ] { } ( ) \ ^ $ . | ? * +
。它们用于执行更强大的搜索。
/\d\.\d/是匹配 字符.字符 所以只要字符中间有点就会通过
/\d\.\d/.test('Chapter 51.1');
/\d\.\d/.test('Chapter 511');
alert( "Chapter 51.1".match(/\d\.\d/) );
alert( "Chapter 511".match(/\d\.\d/) );
alert( "function g()".match(/g\(\)/) );
alert( "1\\2".match(/\\/) );
斜杠符号 '/'
并不是一个特殊字符,但是它被用于在 Javascript 中开启和关闭正则匹配:/...pattern.../
,所以我们也应该转义它。
从另一个方面看,如果我们没使用 /.../
,而是使用另一种 new RegExp
的方式创建正则表达式,则不需要转义斜杠:
alert( "/".match(/\//) );
alert( "/".match(new RegExp("/")) );
如果正则用到变量,那么需要用模板字符串来写,也就只能用new RegExp('正则表达式')
创建一个RegExp对象
要在字面意义上搜索特殊字符 [ \ ^ $ . | ? * + ( )
,我们需要在它们前面加上一个反斜杠 \
(“转义它们”)。
如果在 /.../
内(但不在 new RegExp
内),我们还需要转义 /
字符。
当将字符串传递给给 new RegExp
时,我们需要双反斜杠 \
,因为字符串引号会消耗一个反斜杠。
Daisy_
- 5326
-
一介4188
TypeScript
JavaScript
- 1.6w
-
前端手术刀
Vue.js
JavaScript