正则表达式描述了字符的模式对象。 当您检索某个文本时,可以使用一种模式来描述要检索的内容。RegExp 就是这种模式。 简单的模式可以是一个单独的字符。 更复杂的模式包括了更多的字符,并可用于解析、格式检查、替换等等。 您可以规定字符串中的检索位置,以及要检索的字符类型,等等。
var patt=new RegExp(pattern,modifiers);
或更简单的方法
var patt=/pattern/modifiers;
比如,以下是等价的:
var re = new RegExp("\\w+");
var re = /\w+/;
修饰符用于执行不区分大小写和全文的搜索。
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
输出结果为:
6
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");
结果输出为:
Visit Runoob!
修饰符 | 描述 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
正则表达式: 是一个由字母数字和一些特殊符号组成的描述字符模式的对象。
1、通过RegExp()构造函数来创建(显式创建)
var reg=new RegExp('表达式'[,修饰符]);
2、通过字面量(直接量)方式来创建(隐式创建) --常用
var reg=/表达式/[修饰符]
这含义上不一样,显示创建的是实例对象,隐式创建的是单个对象。
1、test()
功能:用于检测是否于正则匹配。
返回:布尔值,true匹配,false不匹配
语法:reg.test(检测的内容)
2、exec()
功能:用于检测是否于正则匹配。
返回:如果匹配返回数组,不匹配返回null
语法:reg.exec(检测的内容)
说明:
第一个数组元素存放的匹配的内容
第二、三……数组元素存放的是分组所匹配的内容
支持两个属性:
index:匹配项的索引位置
input:
元字符(字符类) | 具有特殊含义的字符 |
---|---|
[……] | 匹配括号内的任意一个字符 [0-9a-zA-Z] |
[^……] | 匹配除了括号内的任意字符 [^0-9] |
\d | 数字 |
\D | 非数字 |
\w | 字母数字下划线 |
\W | 非字母数字下划线 |
\s | 空白字符(空格 制表符) |
\S | 非空白字符 |
. | 除了换行符以外的任意字符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符 |
限定符 | 解释 |
---|---|
^xx | 以xx开始 |
xx$ | 以xx结束 |
重复 | 设置匹配的次数 |
---|---|
{n} | 匹配前一项n次 |
{n,m} | 匹配前一项n到m次 |
{n,} | 匹配前一项n到多次 |
* | 匹配前一项0到多次 |
? | 匹配前一项0到1次 |
| 匹配前一项1到多次 |
表达式 | 描述 | ||
---|---|---|---|
[abc] | 查找方括号之间的任何字符。 | ||
[^abc] | 查找任何不在方括号之间的字符。 | ||
[0-9] | 查找任何从 0 至 9 的数字。 | ||
[a-z] | 查找任何从小写 a 到小写 z 的字符。 | ||
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 | ||
[A-z] | 查找任何从大写 A 到小写 z 的字符。 | ||
[adgk] | 查找给定集合内的任何字符。 | ||
[^adgk] | 查找给定集合外的任何字符。 | ||
(red | blue | green) | 查找任何指定的选项。 |
| 或者
()可以将多个匹配项组合为一个整体
字符串对象.replace(新节点,旧节点)
//g:global
//第一种
var str = "hek45g4152";
var reg = /\d/;
console.log(str.replace(reg,"X"))//hekX5g4152
//第二种
var str = "hek45g4152";
var reg = /\d/g;
console.log(str.replace(reg,"X"))//hekXXgXXXX
//i:ignore case
//第一种情况
var str = "hek45gE4152";
var reg = /e/g;
console.log(str.replace(reg,"X"))//hXk45gE4152
//第二种情况
var str = "hek45gE4152";
var reg = /e/gi;
console.log(str.replace(reg,"X"))//hXk45gX4152
//----------------------
var str = "a1b2c3g4";
var reg = /[a-z]/g;
console.log(str.replace(reg,"X"));//X1X2X3X4
量词
//---------------------------------
var str = "hek45gE4152";
var reg = /\d{2}/g;
console.log(str.replace(reg,"X"))//hekXgEXX
//-----------------------
var str = "hek45gE4152";
var reg = /\d{2,3}/g;
console.log(str.replace(reg,"X"))//hekXgEX2
//-------------------------
//贪婪模式:以量词的最大值为准
var str = "5462187489";
var reg = /\d{2,5}/;
console.log(str.replace(reg,"X"))//X87489
var str = "5462187489";
var reg = /\d{2,5}/g;
console.log(str.replace(reg,"X"))//XX
//非贪婪模式
var str = "5462187489";
var reg = /\d{2,5}?/g;
console.log(str.replace(reg,"X"))//XXXXX
//-----------------------------
var str = "this is a boy";
var reg = /is/g;
console.log(str.replace(reg,"X"))//thX X a boy
//-----------------------------
var str = "this is a boy";
var reg = /\bis\b/g;
console.log(str.replace(reg,"X"))//this X a boy
//------------------------------
var str = "this is a boy";
var reg = /\Bis\b/g;
console.log(str.replace(reg,"X"))//thX is a boy
分组
//-----------------------
var str = "mouse mouth moose lmomomop";
var reg = /mo/g;
console.log(str.replace(reg,"X"));//Xuse Xuth Xose lXXXp
//------------------------
var str = "mouse mouth moose lmomomop";
var reg = /mo{3}/g;
//匹配mo连续出现三次,下边的代码没作用
console.log(str.replace(reg,"X"));//mouse mouth moose lmomomop
//------------------------
var str = "mouse mouth moose lmomomop";
var reg = /(mo){3}/g;
console.log(str.replace(reg,"X"));//mouse mouth moose lXp
或
//-----------------
var str = "mouse mouth moose lmomomop";
var reg = /(mo)|(th)/;
console.log(str.replace(reg,"X"));//Xuse mouth moose lmomomop
//----------------
var str = "mouse mouth mooTHse lmomomop";
var reg = /(mo)|(th)/g;
console.log(str.replace(reg,"X"));//Xuse XuX XoTHse lXXXp
//--------------------
var str = "mouse mouth mooTHse lmomomop";
var reg = /(mo)|(th)/gi;
console.log(str.replace(reg,"X"));//Xuse XuX XoXse lXXXp
前瞻
//前瞻的内容只作为匹配要求,但是不是表达式的内容,所以下边的替换中,那个“ . ”没有被替换
var str = "mo2use mouth mooTHse lmo.momop";
var reg1 = /(mo)(?=\w)/g;
var reg2 = /(mo)(?=\d)/g;
var reg3 = /(mo)(?!\d)/g;
console.log(str.replace(reg1,"X"));//X2use Xuth XoTHse lmo.XXp
console.log(str.replace(reg2,"X"));//X2use mouth mooTHse lmo.momop
console.log(str.replace(reg3,"X"));//mo2use Xuth XoTHse lX.XXp
image.png
//正则的对象属性是只读的,不能自己设置,只能在正则表达式中定义
var reg1 = /[A-Z]/;
var reg2 = /[0-9]/gim;
console.log(reg1.global);//false
console.log(reg1.ignoreCase);//false
console.log(reg1.multiline);//false
console.log(reg1.source);//[A-Z]
console.log(reg1.lastIndex);//0
console.log(reg2.global);//true
console.log(reg2.ignoreCase);//true
console.log(reg2.multiline);//true
console.log(reg2.source);//[0-9]
console.log(reg2.lastIndex);//0
//代码演示----------------------------------------
1、test()
var str = "sj45def1sea48";
var reg1 = /[a-z]\d[a-z]/g;
console.log(str.replace(reg1,"X")) ;//sj45deXea48
res = reg1.test(str);
console.log(res)//true
2、exec()
功能:用于检测是否于正则匹配。
返回:如果匹配返回数组,不匹配返回null
语法:reg.exec(检测的内容)
说明:
第一个数组元素存放的匹配的内容
第二、三……数组元素存放的是分组所匹配的内容
支持两个属性:
index:匹配项的索引位置
input:存放被检测的字符串
//代码演示----------------------
var str = "sj4d5ef1sea4e8g";
var reg1 = /\d(\w)\d(\w)/g;
console.log(str.replace(reg1,"X")) ;//sjXf1seaX
res = reg1.exec(str);
console.log(res);//["4d5e","d".index:2,input:"sj4d5ef1sea4e8"]
//4d5e:匹配的内容
//d:是表达式中的第一个分组的第一次匹配的内容,就是说表达式中第一个(\w)第一次匹配的内容
//e:是表达式中的第二个分组的第一次匹配的内容,就是说表达式中第二个(\w)第一次匹配的内容
//index:是返回的4d5中在字符串中的索引
//input:是返回被匹配的字符串
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
- search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
//--------------------------------------------------
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
输出结果为:
6
//------------------------------------------------
-match()方法
a)非全局
var str = "ay1by2c3Y4";
console.log(str.match(/\d\w/))//["1b", index: 2, input: "ay1by2c3Y4"] 返回结果和exec()方法返回类似
b)全局
var str = "ay1by2c3Y4";
console.log(str.match(/\d\w/g))//["1b", "2c", "3Y"] 返回的是被匹配的数组
//---------------------------------------------------
- replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");
结果输出为:
Visit Runoob!
//------------------------------------------
//replace方法的第二个参数支持函数表达式
var str = "ay1by2c3Y4";
console.log(str);//ay1by2c3Y4
//将字符串中的数字替换为原来的数值加1
console.log(str.replace(/\d(\w)/g,function(result,group,index,str){
console.log(group);//b,c,Y
console.log(index);//2,5,7
console.log(str);//ay1by2c3Y4*4 原字符串打印四次
return parseInt(result)+1
}))//ay2y344
//function(result,group,index,str){}
//参数result是匹配的字符串
//group:是匹配时分组里对应的内容,(和正则有关,没有分组就没有这个参数)
//index:匹配项在字符串中的index
//str:原字符串