JS中的正则表达式
JS中,利用RegExp构造函数创造正则表达式
一般业务处理的过程:
- 验证合法性
- 业务处理
- 数据的传输
正则表达式的出现
验证合法性、减轻服务端压力
正则表达式对象的创建
1.构造函数
- 第一个参数包括正则表达式的主体部分,即正则表达式直接量中两条斜线之间的文本
- 第二个参数指定正则表达式的修饰符。只能传入i,m, g或者其组合,可以省略
var pattern =new RegExp("正则表达式","修饰符")
var pattern =new RegExp("abc","ig");
2.正则表达式字面量
var pattern = /正则表达式/修饰符;
var pattern = /abc/ig;
修饰符(flags)与原型属性
修饰符 | ||
---|---|---|
g | global | 全局 |
i | ignore case | 不区分大小写 |
m | multiline | 多行 |
原型属性 | 含义 |
---|---|
RegExp.prototype.ignoreCase | 布尔值,表明这个正则表达式是否带有修饰符i |
RegExp.prototype.multiline | 布尔值,表明这个正则表达式是否带有修饰符m |
RegExp.prototype.lastIndex | 如果匹配模式带有g,这个属性存储在整个字符串中下 一次检索的开始位置,这个属性会被exec(), test()方法调用到 |
RegExp.prototype.source | 包含正则表达式文本 |
原型属性只有在构建的时候进行赋值,其他时候不能被修改,可利用getOwnPropertyDescriptor()查看属性是否可修改**
Object.getOwnPropertyDescriptor(result.__proto__, 'multiline');
访问器属性:是不给枚举到的,并没有提供set方法,所以不可以设置,但可以获得
不同场景下的正则表达式的应用
应用场景 | 表达式 | 含义 |
---|---|---|
RegExp | ab*c | b为0或多个 |
linux | ab*c | ab任意多个字符然后c |
原型方法
- RegExp.prototype.test(str)
- RegExp.prototype.exec(str)
- RegExp.prototype.toString()
var result = pattern.test(str);
检测一个字符串是否匹配某个模式
- 参数:字符串
- 返回值:布尔类型 true代表有符合条件的,false代表没有符合条件的
var result = pattern.exec(str)
检索字符串中的正则表达式的匹配
- 参数:字符串
- 返回值:数组或null
- 如果正则表达式中有修饰符“g”,这时,在pattern中会维护lastIndex属性,记录下一次开始的位置,当第二次执行exec的时候,从lastIndex开始检索
- 如果正则表达式中没有修饰符“g”,不会维护lastIndex属性,每次执行从开始位置检索
正则表达式中的一些符号与含义
符号 | 含义 |
---|---|
. | 点号,小数点,匹配任意单个字符,换行符\n除外 |
* | 0或多次 |
+ | 1或多次 |
? | 0或1次 |
{n} | 连续出现n次 |
{n,} | 连续出现至少n次 |
{n,m} | 连续出现至少n次,至多m次 |
*? | 像*一样匹配,不过匹配是最小可能匹配 |
+? | 像+一样匹配,不过匹配是最小可能匹配 |
| | 或 |
贪婪 | 匹配重复字符时,尽可能多地匹配,例如{1,4} java(script)? |
非贪婪 | 匹配重复字符时,尽可能少地匹配,例如{1,4}?java(script)?? |
String对正则表达式的支持
search()
- 参数为一个正则表达式。
- 如果参数不为正则表达式,则先通过RegExp将其转换为构造函数。
- 不支持全局检索,返回第一个与之匹配的子串的位置,如果找不到匹配的子串,返回-1。
- 类似于正则表达式的 test 方法。
match()
最常用的正则表达式方法,参数为正则表达式。
返回由匹配结果组成的数组或者null。
当正则表达式中没有g修饰符的时候,就不是全局匹配。这时,数组的第一个元素就为匹配的字符串,剩余的元素则是由正则表达式中用圆括号括起来的子表达式。
如果该正则表达式设置为修饰符g, 则该方法返回的数组包含字符串中所有匹配结果。类似于正则表达式的 exec方法 ,不过不再需要循环遍历再封装了。
replace()
- 用以执行检索和替换操作
- 第一个参数是正则表达式,第二个参数是要替换的字符串
- 返回替换后的字符串
text.replace(/javascript/gi,“JavaScript”); //不区分大小写将所有javascript转换为JavaScript
split()
-
将字符串转为数组,对应想到Array中的join方法
-
参数可以为正则表达式
"1, 2, 3, 4, 5".split(/\s*,\s*/); //["1","2","3","4","5"] 允许分隔符左右两边留有空白