JavaScript RegExp 对象
:测试东西:REGEXPER
经由过程 new
关键词来定义 RegExp
对象。
test()
test()
要领检索字符串中的指定值。返回值是 true
或 false
。
var r = new RegExp("e");
var str = "hello world!";
alert(r.test(str)) // true
exec()
exec()
要领检索字符串中的指定值。返回值是被找到的值。假如没有发明婚配,则返回 null
。
var r = new RegExp("e");
var str = "hello world!";
alert(r.exec(str)); // "e"
这些是JS RegExp供应的一些要领,简朴引见下;
字面量
var reg = /\bis\b/;
这就是一个简朴的字面量正则赋值
\
:将下一个字符标记为或特别字符、或原义字符、或向后援用、或八进制转义符。
比方, 'n'
婚配字符 'n'
。'\n'
婚配换行符。序列 '\\'
婚配 "\"
,而 '\('
则婚配 "("
。
另有关于怎样挑选一个\
?
var str1 = "aaa\\AAA"; // 这里的\\,转换成文本后,只示意一个\,就是说这段待实行文本内含一个\
console.log(str1); // "aaa\AAA"
var r = new RegExp(/\\/); // 构建正则
console.log(str1.replace(r,"R")); // "aaaRAAA"
思索一下建立正则的几种体式格局,而且多熟悉一个正则要领
+
:婚配前面的子表达式一次或屡次。要婚配 +
字符,请运用 \+
。
var s = "dddddddddd";
var r = /d/; // "Sddddddddd"
var r1 = new RegExp("d"); // "Sddddddddd"
var r2 = new RegExp(/d/); // "Sddddddddd"
var r3 = new RegExp("\d"); // "Sddddddddd"
var R = /d+/; // "S"
var R1 = new RegExp("d+") // "S"
var R2 = new RegExp(/d+/); // "S"
var R3 = new RegExp("\d+"); // "S"
// console.log(s.replace(rX,"S"))
\b
:婚配一个字边境,即字与空格间的位置。(不是空格!!!)
var reg = /\bis\b/;
var str = "He is a boy. This is a dog. Where is she?";
console.log(
str.replace(reg,"IS")
);
// "He IS a boy. This is a dog. Where is she?"
// 运用replace要领,将根据正则划定规矩挑选到的字符串(... is ...)替代为"IS",然则我们发明只要第一句被替代
只要第一句被替代?引出我们的:
\g
:实行全局婚配(查找一切婚配而非在找到第一个婚配后住手)
在一段字符串中,能够存在多少相符正则的挑选,不实行全局g,只会挑选第一个,实行全局g,一切相符的都邑被挑选到。
另一种说法:global可选标志,带这个标志示意替代将针对行中每一个婚配的串举行,不然则只替代行中第一个婚配串
reg = /\bis\b/g;
console.log(str.replace(reg,'IS')); // "He IS a boy. This IS a dog. Where IS she?"
.
:除了换行符之外的恣意字符。要婚配包括 ‘n’ 在内的任何字符,请运用像"(.|\n)"
的形式。
*
:婚配前面的子表达式零次或屡次 OR (*
前边的内容能够一连反复运用恣意次以使悉数表达式获得婚配)
比方,zo*
能婚配 “z” 以及 “zoo”。*
等价于{0,}
。
PS:.*
连在一起就意味着恣意数目的不包括换行的字符
var str = "dddddd\ndfdf";
console.log(str); // "dddddd
// dfdf" 这里文本分列毛病,然则晓得内里存在一个换行符就对了
var reg = /.*/;
console.log(str.replace(reg,"X")); // "X
// dfdf" 挑选了换行符前面的恣意字符(这里反复恣意次)
\d
:婚配一个数字字符。等价于 [0-9]
。
\D
:婚配一个非数字字符。等价于 [^0-9]
。
这里要提到一个中括号:
[a-z]
:字符局限。婚配指定局限内的恣意字符。比方,'[a-z]’ 能够婚配 ‘a’ 到 ‘z’ 局限内的恣意小写字母字符。(包括自身)
var str = "a1b2c3d4";
var reg = /\d/; // 挑选一个数字字符(罢了)哪怕有更多挑选只挑选第一个碰到的
console.log(str.replace(reg,"X")); // "aXb2c3d4"
reg = /\d/g; // 在全局中,挑选数字字符,并返回多个(假如存在)相符划定规矩的字串
console.log(str.replace(reg,"X")); // "aXbXcXdX"
reg = /[a-z]\d/g // 一个a-z恣意字符和一个数字字符,并返回多个(假如存在)相符划定规矩的字串
console.log(str.replace(reg,"X")); // "XXXX"
reg = /[a-z]\d/ // 一个a-z恣意字符和一个数字字符
console.log(str.replace(reg,"X")); // "Xb2c3d4"
// \D 婚配一个非数字字符,与\d相反
str = "123ABC"
reg = /\D/;
console.log(str.replace(reg,"0")); // "1230BC"
reg = /\D/g; // 一个非数字字符,并返回多个(假如存在)相符划定规矩的字串
console.log(str.replace(reg,"0")); // "123000"
reg = /\D{3}/; // 三个一连的非数字字符
console.log(str.replace(reg,"456")); // "123456"
// 辨别大小写
str = "A1B2C3d4"
reg = /[A-Z]/g; // 挑选A-Z大写字母恣意一个,并返回多个(假如存在)相符划定规矩的字串
console.log(str.replace(reg,"O")) // "O1O2O3d4"
reg = /[A-Z]\d/; // 挑选A-Z大写字母恣意一个和一个数字
console.log(str.replace(reg,"O")) // "OB2C3d4"
reg = /[A-Z]\d/g; // 挑选A-Z大写字母恣意一个和一个数字,并返回多个(假如存在)相符划定规矩的字串
console.log(str.replace(reg,"O")) // "OOOd4"
和大括号:
{n}
:n
是一个非负整数。婚配肯定的 n 次。比方,’o{2}’ 不能婚配 “Bob” 中的 ‘o’,然则能婚配 “food” 中的两个 o。
{n,}
:n
是一个非负整数。起码婚配n 次。比方,’o{2,}’ 不能婚配 “Bob” 中的 ‘o’,但能婚配 “foooood” 中的一切 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m}
:m
和 n
均为非负整数,个中n <= m。起码婚配 n 次且最多婚配 m 次。比方,”o{1,3}” 将婚配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
?
:婚配前面的子表达式零次或一次。比方,”do(es)?” 能够婚配 “do” 或 “does” 中的”do” 。?
等价于 {0,1}
。
+
:婚配前面的子表达式一次或屡次。比方,’zo+’ 能婚配 “zo” 以及 “zoo”,但不能婚配 “z”。+
等价于 {1,}
。
另有之前的:
*
:婚配前面的子表达式零次或屡次。比方,zo* 能婚配 “z” 以及 “zoo”。*
等价于{0,}
。
以上5种在正则中被成为限定符,很好明白,限定婚配次数嘛
var str = "A1234B123C123456";
var reg = /\d{4}/; // {4}之前的\d反复婚配4次
console.log(str.replace(reg,"&")); // "A&B123C123456"
reg = /\d{6}/ // 反复6次
console.log(str.replace(reg,"&")); // "A1234B123C&"
reg = /[A-Z]\d{6}/ // 一个A-Z恣意字母,和一个一连6个恣意数字
console.log(str.replace(reg,"&")) // "A1234B123&"
str = "000&1111&222222&55555555&";
reg = /\d{4,}/; // 一个数字,起码婚配4次
console.log(str.replace(reg,"——")); // "000&——&222222&55555555&"
reg = /\d{4,}/g; // (一个数字,起码婚配4次),并返回多个相符划定规矩的婚配串
console.log(str.replace(reg,"——")); // "000&——&——&——&"
reg = /\d{4,6}/g; // (一个数字,起码4次,最多6次)
console.log(str.replace(reg,"——")); // "000&——&——&——55&"
reg = /\d?/g; // 等价于:{0,1}
console.log(str.replace(reg,"?")); // "????&?????&???????&?????????&?"
reg = /\d+/; // 等价于:{1,}
console.log(str.replace(reg,"+")); // "+&1111&222222&55555555&"
reg = /\d+/g;
console.log(str.replace(reg,"+")); // "+&+&+&+&"
reg = /\d*/g;
console.log(str.replace(reg,"+")); // "++&++&++&++&+"