js正则
正则的含义
- 正则表达式是描述字符模式的对象。
- 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。
- 而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数。
- 正则表达式主要用来验证客户端的输入数据。可以节约大量的服务器端的系统资源,并且提供更好的用户体验。
正则表达式用法及区别
一、String中正则表达式方法
方法 | 描述 |
---|---|
match(Reg) | 返回RegExp匹配的包含全部字符串的数组或null |
search(Reg) | 返回RegExp匹配字符串首次出现的位置 |
replace(Reg,newStr) | 用newStr替换RegExp匹配结果,并返回新字符串 |
split(Reg) | 返回字符串按指定RegExp拆分的数组 |
String正则使用
var str = 'hello';
var Reg = /e/i;
str.match(Reg);
二、RegExp对象的方法
1.创建方法
说明
- pattern 模式 模板,要匹配的内容
- modifiers 修饰符
2、pattern和 修饰符
修饰符
修饰符用于执行区分大小写和全局匹配
- i 忽略大小写匹配
- g 全局匹配,默认只匹配第一个元素,就不在进行匹配
- m 执行多行匹配
pattern 模式
①、基本匹配
xxx ———————————匹配xxx字符
var Reg = /abc/;
=================================
x|y|z —————————-匹配x或y或z字符
var Reg = /abc|bac|cba/;
②、基本匹配[]
[abc]———————————–匹配abc之中的任何一个字符
非
=========================================
[^abc]———————————匹配非a非b非c字符的
到
==========================================
[0-9]` ———————————匹配`0至9`之间的数字
`[a-z]` ———————————匹配`小写a至小写z`的字符
`[A-Z]` ———————————匹配`大写A至大写Z`的字符
匹配中文 `[\u4e00-\u9fa5]
=======================================
还可以组合
var Reg = /hello [0-9a-zA-z]/;
③元字符(转义字符)
.` —————————————–匹配`单个字符`,除了换行和行结束符
`\w`—————————————匹配`单词字符`,`数字`,`_`(下划线)
`\W`—————————————匹配`非`(`单词字符`和`_`(下划线))
`\d` —————————————匹配`数字`
`\D` —————————————匹配`非数字`
`\s` —————————————匹配空白字符(`空格`)
`\S` —————————————匹配`非空格`字符
`\b` —————————————匹配`单词边界` ( 除了 (字)字母 数字_ 都算单词边界)
`\B` —————————————匹配`非单词边界`
`\n` —————————————匹配`换行符
==================================
特殊的转译字符. \ /
var reg = /\./;//匹配.
var reg = /\\/;//匹配\
var reg = /\//;//匹配/
④、量词
n?———————————匹配0个或一个n的字符串
n*———————————匹配0个或多个字符串(任意个)
n+———————————匹配至少一个n字符串
n{X}——————————匹配包含X个n的序列的字符串
n{X,Y}————————–匹配包含至少X或至多Y个n的序列的字符串
n{x,}—————————-匹配至少X个n的序列字符串
^n———————————匹配以n开头的字符串
n$———————————匹配以n结尾的字符串
⑤贪 婪 惰 性
贪婪: 尽可能多的匹配
惰性: 尽可能少的匹配
前提条件都是要匹配到内容
—— 贪 婪 —— | —— 惰 性 —— |
---|---|
+ | +? |
? | ?? |
* | *? |
{n} | {n}? |
{n,m} | {n,m}? |
{n,} | {n,}? |
⑥子组(子表达式)
子组:使用()小括号,指定一个子表达式后,称之为分组
- 捕获型
- 非捕获型
1)、捕获型
var str = 'abcdefg';
var reg = /(abc)d/;//匹配abcd
var val = reg.exec( str);
console.log( val ); //["abcd", "abc", index: 0, input: "abcdefg"]
索引0 为匹配的结果
索引1 为第一个子表达式 匹配结果
index :首次匹配成功的索引值,
input: 匹配目标
2)、非捕获型
- (?:pattern)
- (?=pattern) 零宽度正向预言
Windows (?=2000) //匹配windows且后面跟2000
匹配 “Windows2000” 中的 “Windows”
不匹配 “Windows3.1” 中的 “Windows”。
- (?!pattern) 零宽度负向预言
Windows (?!2000)//匹配windows且后面非2000
匹配 “Windows3.1” 中的 “Windows”
不匹配 “Windows2000” 中的 “Windows”。
3、创建方法
①.直接量
语法:Reg = /pattern/modifiers;
var Reg = /box/gi;
②、new RegExp
语法 Reg = new RegExp( pattern , modifiers );
pattern ,modifiers此时是字符串
var Reg = new RegExp(“box”,”gi”);
3、RegExp对象的方法
方法 | 描述 |
---|---|
exec() | 在字符串中执行匹配搜索,返回首次匹配结果数组, |
test() | 在字符串中测试模式匹配,返回true或false |
使用
var pattern = new RegExp(“box”,”gi”);
pattern.test(str);
pattern.exec(str);
注意:正则方法和字符串方法使用避免混淆
正则方法:pattern.test(str); 方法的主体是正则表达式
字符串方法:str.match(pattern);方法的主体是字符串