正则表达式
目录1. 正则表达式语法
-
正则表达式可以用来定义字符串的规则,程序可以根据这些规则来判断一个字符串是否符合要求
-
创建正则表达式
语法:
var reg = /[正则表达式]/[匹配模式]
或var reg = new RegExp("[正则]","[匹配模式]");
var patt = /w3school/i;
1.1 方括号
-
a|b
表示"或"var patt = /a|b/; //a或b都符合条条件
-
[a-b]
表示"一定范围内"var patt = /[a-l]/; //a到l都符合条件
-
[^a]
表示"除外"var patt = /[^a]/; //除了a都符合条件
1.2 量词
-
{n}
表示"n在字符串中出现的次数"+
表示"至少一个",相当于{1,}*
表示"0个或多个",相当于{0,}?
表示"0个或一个",相当于{0,1}var patt = /ab{3}/; //ab出现3次才符合条件 var patt = /ab{1,3}/; //ab出现1~3次才符合条件 var patt = /ab{,3}/; //ab出现3以下次才符合条件
-
^n
表示"以n开头的字符串"$n
表示"以n结尾的字符串"?=n
表示"紧接n其后的字符串"?!n
表示"没有紧接n其后的字符串"var patt = /^a/; //匹配开头的a var patt = /a$/; //匹配结尾的a //对其后紧跟 "all" 的 "is" 进行全局搜索 var str="Is this all there is"; var patt1=/is(?= all)/g; //对其后没有紧跟 "all" 的 "is" 进行全局搜索 var str="Is this all there is"; var patt1=/is(?! all)/gi;
1.3 元字符
元字符 | 描述 |
---|---|
. | 查找单个字符,除了换行和行结束符 |
\w | 查找单词字符(包括a-z、A-Z、0-9、下划线) |
\W | 查找非单词字符 |
\d | 查找数字 |
\D | 查找非数字字符 |
\s | 查找空白字符 |
\S | 查找非空白字符 |
var str="Give 100%!";
var patt1=/\w/g; //G,i,v,e,1,0,0
var str="Give 100%!";
var patt1=/\W/g; //,%,!
var str="Give 100%!";
var patt1=/\d/g; //1,0,0
2. RegExp对象属性
-
global:RegExp 对象是否具有标志 g
ignoreCase:RegExp 对象是否具有标志 i
-
lastIndex:一个整数,标示开始下一次匹配的字符位置
-
每一次匹配后lastIndex都会被改变,具体变化由匹配模式和修饰符决定
-
此属性常由方法 RegExp.exec() 和 RegExp.test()改变,可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本
-
只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0
-
不具有标志 g 和不表示全局模式的 RegExp 对象不能使用 lastIndex 属性
-
如果在成功地匹配了某个字符串之后就开始检索另一个新的字符串,需要手动地把这个属性设置为 0
-
-
source:正则表达式的源文本
3. RegExp对象方法
-
test:检索字符串中指定的值。返回 true 或 false
var str = "Visit W3School"; var patt1 = new RegExp("W3School"); var result = patt1.test(str); //true
-
exec:检索字符串中指定的值,返回找到的值,并确定其位置
-
如果 exec() 找到了匹配的文本,则返回一个结果数组,否则,返回 null。
-
此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与 RegExpObject 的第 1 个子表达式相匹配的文本(如果有的话),第 2 个元素是与 RegExpObject 的第 2 个子表达式相匹配的文本(如果有的话),以此类推
-
除了数组元素和 length 属性之外,exec() 方法还返回两个属性:
index 属性是匹配文本的第一个字符的位置
input 属性则存放的是被检索的字符串 string
-
可以看得出,在调用非全局的 RegExp 对象的 exec() 方法时,返回的数组与调用方法 String.match() 返回的数组是相同的
-
当 RegExpObject 是一个全局正则表达式时,它会在 RegExpObject 的 lastIndex 属性指定的字符处开始检索字符串 string。当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置
这就是说,可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0
var str = "Visit W3School"; var patt = new RegExp("W3School","g"); var result; while ((result = patt.exec(str)) != null) { document.write(result); document.write(" "); document.write(patt.lastIndex); } //W3School 14
-
4. 支持正则表达式的 String 对象的方法
-
search():检索与正则表达式相匹配的值,并返回位置
-
match():找到一个或多个正则表达式的匹配
-
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配
如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息
该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本
除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性表示匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用
-
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串,若没有找到任何匹配的子串,则返回 null
如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性
-
在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。如果需要这些全局检索的信息,可以使用 RegExp.exec()
-
-
replace():替换与正则表达式匹配的子串
-
split():把字符串分割为字符串数组
var str="Visit W3School!";
document.write(str.search(/W3School/)); //6
var str="1 plus 2 equal 3";
document.write(str.match(/\d+/g)); //1,2,3
var str="Visit Microsoft!";
document.write(str.replace(/Microsoft/, "W3School")); //Visit W3School!
var str="How are you doing today?"
document.write(str.split(" ") + "<br />")
document.write(str.split("") + "<br />")
document.write(str.split(" ",3))
/*
How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you
*/
标签:匹配,正则表达式,JavaScript,笔记,字符串,str,var,RegExp
From: https://www.cnblogs.com/Solitary-Rhyme/p/16849739.html