正则表达式

112 阅读3分钟

正则表达式介绍

正则表达式的引入

如何获取一个字符串中的数字字符,并按数组形式输出,如:Dgfhfgh254bhku289fgdhdy675gfh输出: [254,289,675]

分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里

const str = "Dgfhfgh254bhku289fgdhdy675gfh';
const reg = /\d+/g
const array = str.match(reg);
console.log(array);

正则表达式常用方法

1.显式定义(构造函数)

 let  变量名 =  new RegExp("正则表达式模式");
 let myregex = new ReExp("\d+");

2.隐式定义(字面量)

let 变量名 =  /正则表达式模式/
let myregex = /\d+/;

正则表达式常用方法

1.test

正则去匹配字符串,如果匹配成功就返回真,匹配失败返回假

写法:正则.test(字符串)

var str='abcdef';
var re=/b/; 
alert(re.test(str));

2.search

正则去匹配字符串,如果匹配成功,就返回匹配成功的位置,如果匹配失败就返回-1

写法:字符串.search(正则)

var str="abcdef";
var re=/b/;
alert(str.search(re));
//返回1
var re=/w/;
//返回-1
var re=/B/;
//返回-1

3.match 正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,如果匹配不成功,就返回null

写法:字符串.match(正则)

//找出数字
var str="dgfhfgh254bhku289fgdhdy675";
var re=/\d+/g;
alert(str.match(re));
//输出2	

4.replace

正则去匹配字符串,匹配成功的字符被新的字符串替换

replace的写法:字符串.replace(正则,新字符串)

var str="aaa";
var re=/a/;
str=str.replace(re,"b");
alert(str);
//输出baa

5.exec

正则去匹配字符串,如果匹配成功,就返回匹配成功的数组,index:表示第一个匹配的字符在原字符串中的位置,input:表示原字符串,groups:表示当初中命名的分组时匹配到的分组对象;如果匹配不成功,就返回null

写法:正则. exec(字符串)

//要找出数字
var str="dgfhfgh254bhku289fgdhdy675";
var reg=/\d+/g;
alert(reg.exec(str));
//输出['254', index: 7, input: 'Dgfhfgh254bhku289fgdhdy675gfh', groups: undefined]

正则表达式字符

常用元字符

image.png

连接符-范围

image.png

限定符-量词

image.png

定位符-边界

image.png

^once$
这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串once upon a time匹配,与There once was a man from NewYork不匹配。正如如^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串。

bucket$

这个模式与Who kept all of this cash in a bucket匹配,与buckets不匹配。字符^和$同时使用时,表示精确匹配(字符串与模式一样)

修饰符

一、修饰符

g:global 全文搜索,不添加,搜索到第一个匹配停止

i:ignore case 忽略大小写,默认大小写敏感

m:multiple lines 多行搜索

二、用法:

var reg = /\bis\b/;
var str = "He is a boy, This is a dog.Where is she? ";
str.match(reg);
//只匹配第一个
//正则后加g匹配所有的
var reg = /\bis\b/g;

特殊转义符

  • \f 匹配换页符
  • \n 匹配换行符
  • \r 匹配回车符
  • \t 匹配制表符
  • \v 匹配垂直制表符
  • \ 匹配\
  • " 匹配 "
  • ' 匹配 '

Unix系统里,每行结尾只有“<换行>”,即”\n”;

Windows系统里面,每行结尾是“<换行><回车 >”,即“\n\r”;

Mac系统里,每行结尾是“<回车>”,即”\n”;

优先级排序

image.png

贪婪模式与非贪婪模式

  • 在贪婪(默认)模式下,正则引擎尽可能多的重复匹配字符

    var str = 'a "witch" and her "broom" is one";
    str.match( /".*"/g);
    

预计上面会匹配得到 witch和 broom两个字符串,运行上面的例子,却发现结果只匹配到 "witch" and her "broom" 一个字符串。之所以出现这个结局,是因为正则的贪婪模式在起作用

  • 非贪婪模式

非贪婪模式和贪婪模式相反,可通过在代表数量的标示符后放置?来开启非贪婪模式,如 ? 、+? 甚至是 ?? 。在非贪婪模式下,正则引擎尽可能少的重复匹配字符

var str = 'a "witch" and her "broom" is one ';
str.match(/".*?"/g )  // "witch", "broom"