您的位置:首页 > Web前端 > JavaScript

javascript 正则表达式基本使用

2017-10-09 00:00 417 查看
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。

搜索模式可用于文本搜索和文本替换。

什么是正则表达式?

正则表达式是由一个字符序列形成的搜索模式。

当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。

正则表达式可以是一个简单的字符,或一个更复杂的模式。

正则表达式可用于所有文本搜索和文本替换的操作。

语法:

```
方式一: 字面量方式  /正则表达式主体/修饰符(可选);
方法二: 构造函数声明方式    var reg = new RegExp("abc"); 或者  var reg = new RegExp(/abc/);
```

常见用法:

1.字符类 ---- 在正则内部使用[]标识

含义:[]整体表示一位字符,满足内部的任何一个字符即可

var reg=/[abc]/    //可以匹配abc任意一个字符的字符串
案例:console.log(reg.test("ljalubigcliu")); //true
console.log(reg.test("ljkluigliu")); //false


2.反向类 ---- 在字符类的[]内最开始位置书写^,表示反向类

含义:反向类的作用,可以匹配除[]内部字符以外的其他字符

var reg = /[^abc]/;  //可以匹配到除abc以外的其他字符
案例:console.log(reg.test("abcabcabcd"));  //true
console.log(reg.test("aaaaaaaa"));//false



3.范围内 ---- [a-n]表示可以匹配字符a到字符n间的任意字符

含义:范围类是对字符串功能的扩展,可以使用一个范围表示多种字符

ar reg = /[a-n]/;  //表示a-n之间的所有小写字符
案例:console.log(reg.test("uuuuuauuuuuu"));  //true
console.log(reg.test("uuuuuopqrstuuuuuu"));  //false


4.组合类 ---- 对范围类的扩展

var reg = /[a-z]/;  //所有的小写字符
var reg = /[n-y2-7B-W]/;  //如果想要同时检测多种范围,可以采用自由组合的方式


5.预定义类 ---- 内部预先准备好的一些匹配方式

\d: 数字字符digit  [0-9];
\D:非数字字符 [^0-9];
\w:[a-zA-Z0-9_]的简写,单词字符(所有的字母数字和_);
\W:[^a-zA-Z0-9_]的简写,非单词字符

案例:
console.log(/\d/.test("kudgwaygdi1awud"));  //true
console.log(/\d/.test("kudgwaygdiawud"));  //false
console.log(/\D/.test("1234567890"));  //false
console.log(/\D/.test("123456A7890"));  //false


6.或者 ---- ‘|’某一个或者另一个

含义:/a|b|c|d|e/ 选区a、b、c、d、e之间的任意一个兼可

var reg = /ab|bd|io|we|gh/;
console.log(reg.test('abc'));  //true


7.边界标识 ---- 在正则的最开始位置书写^ 表示以什么开头; 在正则最后位置书写 $ 表示以什么结尾;

边界标识1:^以什么开头
var reg = /^abc/;  //以abc开头
console.log(reg.test("abcnukfguwadaw")); //true
console.log(reg.test("hhhabcnukfguwadaw")); //false

边界标识2:$以什么结尾
var reg = /abc$/;  //以abc结尾
console.log(reg.test("uubuefeabc")); //true
console.log(reg.test("uubuefeabcmli")); //false

特殊用法:如果一个正则中同时使用了^和$,表示严格匹配(必须和内部的内容完全一致)
var reg = /^abc$/;
console.log(reg.test("abc"));//true
console.log(reg.test("abcabc"));//false


8 使用自定义量词 ---- 可以减少对正则内部重复部分的书写

自定义量词:
1 {n} 内部的数值表示前面书写的内容重复多少次
var reg = /^a{5}$/;
console.log(reg.test("aaaa"));//false
console.log(reg.test("aaaaa"));//true
console.log(reg.test("aaaaaa"));//false

2 {n,} 需要出现的次数为至少n次
var reg = /^a{3,}$/;
console.log(reg.test("aa"));
console.log(reg.test("aaa"));
console.log(reg.test("aaaa"));
console.log(reg.test("aaaaa"));
console.log(reg.test("aaaaaa"));

3 {n,m} 需要出现的次数为n-m次之间
var reg = /^a{3,5}$/;
console.log(reg.test("aa"));
console.log(reg.test("aaa"));
console.log(reg.test("aaaa"));
console.log(reg.test("aaaaa"));
console.log(reg.test("aaaaaa"));


9 使用预定义量词:正则规则中预先定义好的规则

1 * 表示0次或n次  使用方式(某个要匹配的部分可有可无均正确时,使用*)
var reg = /^a*$/;
console.log(reg.test(""));
console.log(reg.test("a"));
console.log(reg.test("aaaaa"));
console.log(reg.test("aaaaaaaaaaaaaa"));

2 + 表示1次或n次  使用方式,某个部分至少出现一次,可以使用+
var reg = /^a+$/;
console.log(reg.test(""));
console.log(reg.test("a"));
console.log(reg.test("aa"));
console.log(reg.test("aaaaa"));
console.log(reg.test("aaaaaaaaaaaaaa"));

3 ? 表示0次或1次
var reg = /^a?$/;
console.log(reg.test(""));
console.log(reg.test("a"));
console.log(reg.test("aa"));
console.log(reg.test("aaaaaa"));

//注意*所指示的部分,如果需要是整体,可以添加()
var reg = /^(abc)*$/;
console.log(reg.test("abcabcabc"));//true
console.log(reg.test("abcccccccc"));//false


正则表达式修饰符

修饰符 可以在全局搜索中不区分大小写:

i 执行对大小写不敏感的匹配。

g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)

m 执行多行匹配。



常用字符串方法

重用方法以下五个:test()、serach()、 replace()、match()、 exec() 下面一一解释:

test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。

实例:
var patt = /e/;
patt.test("The best things in life are free!");
//解析:字符串中含有"e",所以输出true;


replace() 方法用于字符串替换

实例:
var str =Microsoft word
var txt = str.replace(/microsoft/i,"Runoob");
//使用了 i 忽略大小写
//使用正则表达式且不区分大小写将字符串中的 Microsoft 替换为 Runoob :


search() 方法用于查找

实例:
检索字符串中"studio"的子串
var str="Visit studio";
var n=str.serach("studio");
//解析:结果返回匹配字符串的起始坐标 6


提取操作 match()

提取出内部的邮箱地址:
var str="lilei@xxx.gov.com我:好人一生平安,邮箱是wuyou@qq.com";
console.log(str.match(/\w+@\w+(\.\w+)+/g));
//返回的结果是数组:[lilei@xxx.gov.com,wuyou@qq.com];


exec

exec() 方法用于检索字符串中的正则表达式的匹配。

使用用一个正则同时匹配多次同一个字符串,操作会进行累计。

组提取:在正则中()不仅可以像以前一样使用,还可以进行分组,分组后的内容会被exec提取出来;

但是如果某一个组的内容并不需要提取,可以在这个括号的开始位置,书写?:

exec()如何未匹配到合适的项,返回为null

var str = "小明:大神你好,关注你很久,你共享了很多的内容,我都非常喜欢,么么哒,我得邮箱是xiaoming@163.com.cn小红:前两天我老公说想看这个片子,我要今天晚上跟他一起看,我得邮箱是xiaohong@sina.com李雷:不废话,直接六邮箱 lilei@xxx.gov.com我:好人一生平安,邮箱是wuyou@qq.com";

使用正则.exec(字符串):
var reg = /(\w+)@\w+(?:\.\w+)+/g;
while(result=reg.exec(str)){
console.log(result);
}
//结果会输出所有匹配的邮箱
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息