js中正则表达式 (笔记)
定义:使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
常用元字符(下列不完整,仅为常用) 查看更多)
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 “\” , 而 “\(” 则匹配 “(“等等 。 |
^ | 匹配输入字符串的开始位置。在数字或字母前表示逻辑“非” |
$ | 匹配输入字符串的结束位置。 |
* | 匹配前面的子表达式零次或多次。 |
+ | 匹配前面的子表达式一次或多次。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
[a-z] | 字符范围 [^a-z]非a-z范围 |
[0-9] | 数字范围 [^0-9]非0-9范围 |
\b | 匹配一个单词边界。 |
\B | 匹配非单词边界。 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\w | 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。 |
? | 匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。 |
| | 表示逻辑“或” |
. | 任意元素 |
( ) | 分组符 |
正则表达式常用的方法
1 test() :在字符串中查找符合正则的内容,若查找到返回true,反之返回false.
例如要匹配一个字符串中是否全是数字:
首先定义一个定义正则字符串:
A. var reg = new RegExp(“\d”); //RegExp对象。参数就是我们想要制定的规则。有一种情况必须用这种方式,下面会提到。
B. var reg = /\D/; //简单写法
var str = '123aaa456';
var reg = /\D/; // \D代表非数字
if( reg.test(str) ){ // 返回true,代表在字符串中找到了非数字。
console.debug ('不全是数字');}
2 search() :在字符串搜索符合正则的内容,搜索到就返回出现的位置(从0开始,如果匹配的不只是一个字母,那只会返回第一个字母的位置), 如果搜索失败就返回 -1 。
用法:字符串.search(正则)
例子:在字符串中找字母 ‘Is’
var str = 'This Is A Test';
var re = /Is/;
console.debug( str.search(re) ); //结果为5
如果忽略字母大小写,则正则表达式可以写为
var re =/Is/i 其中i表示忽略大小写
var re = new RegExp(‘is’,‘i’); 也可以这样写.
3 match() 在字符串中搜索复合规则的内容,搜索成功就返回内容,格式为数组,失败就返回null。
用法: 字符串.match(正则)
例子:找出指定格式的所有数字,如下找到 123,54,33,879
var str = 'haj123sdk456hask7dkhalsd89';
var re = /\d+/g;
console.debug( str.match(re) );
结果[“123”, “456”, “7”, “89”]
g:表示全局搜索,若去掉g,则结果为[“123”]
4 replace() :查找符合正则的字符串,就替换成对应的字符串。返回替换后的内容。
用法: 字符串.replace(正则,新的字符串/回调函数)(在回调函数中,第一个参数指的是每次匹配成功的字符)
例如:将字符串中的is 替换为X
var str='This is a test';
var re =/is/g;
console.debug(str.replace(re,"X"));
要想实现几个字母对应几个X,则用回调函数实现:
var str ='This is a test';
var re =/is/g;
var str2 = str.replace(re,function(str){
console.debug(str);
var result = '';
for(var i=0;i<str.length;i++){
result += 'X';
}
return result;
});
console.debug(str2);
附:利用正则表达式验证邮箱格式,用到test()方法
方法1:var reg=/^.@[^_]$/;
方法2:var re=/^\w+([.-]\w+)\@\w+([.-]\w+).\w+$/
方法3:var re=/^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$/;
由于邮箱地址的多样性,故使得邮箱的验证方式也有多种方式,以上只列出三项,各种方式只能进行粗略的判断。
参考:
1.正则表达式相关介绍:
http://www.runoob.com/regexp/regexp-syntax.html
2.正则表达式图形化分析:
https://regexper.com/