JavaScript RegExp 对象
2016-04-28 本文已影响50人
Top_Chenxi
require(['jquery'], function($) {
// RegExp 对象
// RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。
// 直接量语法
// /pattern/attributes
// 创建 RegExp 对象的语法:
var pattern = "[abc]";
var attributes = "g";
var myReg = new RegExp(pattern, attributes);
// 参数 pattern 是一个字符串,指定了正则表达式的模式或其他正则表达式。
// 参数 attributes 是一个可选的字符串,包含属性 "g"、"i" 和 "m",分别用于指定全局匹配、区分大小写的匹配和多行匹配。
// 返回值
// 一个新的 RegExp 对象,具有指定的模式和标志。如果参数 pattern 是正则表达式而不是字符串,那么 RegExp() 构造函数将用与指定的 RegExp 相同的模式和标志创建一个新的 RegExp 对象。
// 如果不用 new 运算符,而将 RegExp() 作为函数调用,那么它的行为与用 new 运算符调用时一样,只是当 pattern 是正则表达式时,它只返回 pattern,而不再创建一个新的 RegExp 对象。
// 方括号用于查找某个范围内的字符:
// [abc] 查找方括号之间的任何字符。
console.log(/[abc]/.test("abc"));
// 结果:true
console.log(/[abc]/.test("defg"));
// 结果:false
// [^abc] 查找任何不在方括号之间的字符。
console.log(/[^abc]/.test("abc"));
// 结果:false
console.log(/[^abc]/.test("defg"));
// 结果:true
// [0-9] 查找任何从 0 至 9 的数字。
console.log(/[0-9]/.test("a1b2c3"));
// 结果:true
console.log(/[0-9]/.test("abc"));
// 结果:false
// [a-z] 查找任何从小写 a 到小写 z 的字符。
// [A-Z] 查找任何从大写 A 到大写 Z 的字符。
// [A-z] 查找任何从大写 A 到小写 z 的字符。
console.log(/[a-z]/.test("abc"));
// 结果:true
console.log(/[A-Z]/.test("abc"));
// 结果:false
console.log(/[A-z]/.test("abc"));
// 结果:true
// (red|blue|green) 查找任何指定的选项。
var reg1 = new RegExp("blue|abl1");
console.log(reg1.test("ablue"));
// 结果:true
console.log(reg1.test("abl1ue"));
// 结果:true
// 元字符(Metacharacter)是拥有特殊含义的字符:
// . 查找单个字符,除了换行和行结束符。
var reg2 = new RegExp("h.t");
console.log(reg2.test("That's hot!"));
// 结果:true (hat,hot都是)
console.log(reg2.exec("That's hot!"));
// 结果:["hat", index: 1, input: "That's hot!"] 查找第一个匹配,如果使用g属性,就会指向最后一个匹配的["hot", index: 7, input: "That's hot!"]
// \w 查找单词字符。
console.log(/\w/.exec("Give 100%!"));
// 结果:["G", index: 0, input: "Give 100%!"]
// \W 查找非单词字符。
console.log(/\W/.exec("Give 100%!"));
// 结果:[" ", index: 4, input: "Give 100%!"]
// \d 查找数字。
console.log(/\d/.exec("Give 100%!"));
// 结果:["1", index: 5, input: "Give 100%!"]
// \D 查找非数字字符。
console.log(/\D/.exec("Give 100%!"));
// 结果:["G", index: 0, input: "Give 100%!"]
// \s 查找空白字符。
console.log(/\s/.exec("Give 100%!"));
// 结果:[" ", index: 4, input: "Give 100%!"]
// \S 查找非空白字符。
console.log(/\S/.exec("Give 100%!"));
// 结果:["G", index: 0, input: "Give 100%!"]
// \b 匹配单词边界。在单词边界匹配的位置,单词字符后面或前面不与另一个单词字符直接相邻
// 如果未找到匹配,则返回 null。
// /\bm/ 匹配 "moon" 中的 'm';
// /oo\b/ 不匹配 "moon" 中的 'oo',因为 'oo' 后面的 'n' 是一个单词字符;
// /oon\b/ 匹配 "moon" 中的 'oon',因为 'oon' 位于字符串的末端,后面没有单词字符;
// /\w\b\w/ 不匹配任何字符,因为单词字符之后绝不会同时紧跟着非单词字符和单词字符
console.log(/\bWo/.exec("Hello World"));
// 结果:["Wo", index: 6, input: "Hello World"]
console.log(/\bor/.exec("Hello World"));
// 结果:null
// \B 匹配非单词边界。匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。
console.log(/\BWo/.exec("Hello World"));
// 结果:null
console.log(/\Bor/.exec("Hello World"));
// 结果:["or", index: 7, input: "Hello World"]l
// \n 查找换行符。
console.log(/\n/.exec("Hello World.\nLearn Javascript."));
// \f 查找换页符。
// \r 查找回车符。
// \t 查找制表符。
// \v 查找垂直制表符。
// \xxx 查找以八进制数 xxx 规定的字符。
// 八进制 127 (W)
console.log(/\127/.exec("Hello World.World is wonderful!"));
// 结果:["W", index: 6, input: "Hello World.World is wonderful!"]
// \xdd 查找以十六进制数 dd 规定的字符。
// \uxxxx 查找以十六进制数 xxxx 规定的 Unicode 字符
// 量词
// n+ 匹配任何包含至少一个 n 的字符串。
console.log(/o+/.exec("Hello World.World is wonderful!"));
// 结果:["o", index: 4, input: "Hello World.World is wonderful!"]
// n* 匹配任何包含零个或多个 n 的字符串。
console.log(/Wo*/.exec("Hello World.World is wonderful!"));
// 对 "W" 进行全局搜索,包括其后紧跟的一个或多个 "o":
// 结果:["", index: 0, input: "Hello World.World is wonderful!"]
// n? 匹配任何包含零个或一个 n 的字符串。
console.log(/10?/.exec("1, 100 or 1000?"));
// 结果:["1", index: 0, input: "1, 100 or 1000?"] (1,10,10)都符合
// n{X} 匹配包含 X 个 n 的序列的字符串。
console.log(/\d{4}/.exec("100, 1000 or 10000?"));
// 结果:["1000", index: 5, input: "100, 1000 or 10000?"] //查找四个数字,有两个匹配1000和10000里的1000
// n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
console.log(/\d{3,4}/.exec("100, 1000 or 10000?"));
// 结果:["100", index: 0, input: "100, 1000 or 10000?"] //查找三个数字或四个数字,有三个匹配100,1000和10000里的1000
// n{X,} 匹配包含至少 X 个 n 的序列的字符串。
console.log(/\d{3,}/.exec("10, 100, 1000 or 10000?"));
// 结果:["100", index: 4, input: "10, 100, 1000 or 10000?"] //查找三个数字或三个以上个数字,有三个匹配100,1000和10000里的1000
// n$ 匹配任何结尾为 n 的字符串。
console.log(/d!$/.exec("Hello World!"));
// 结果:["d!", index: 10, input: "Hello World!"]
// ^n 匹配任何开头为 n 的字符串。
console.log(/^He/.exec("Hello World!"));
// 结果:["He", index: 0, input: "Hello World!"]
// ?=n 匹配任何其后紧接指定字符串 n 的字符串。
console.log(/llo(?= Wor)/.exec("Hello World!"));
// 结果:["llo", index: 2, input: "Hello World!"]
// ?!n 匹配任何其后没有紧接指定字符串 n 的字符串。
console.log(/llo(!= Wor)/.exec("Hello World!"));
// 结果:null
// RegExp 对象方法
// exec 检索字符串中指定的值。返回找到的值,并确定其位置。
console.log(/[1-9]/.exec("a1b2"));
// 结果:["1", index: 1, input: "a1b2"]
// test 检索字符串中指定的值。返回 true 或 false。
console.log(/[1-9]/.test("a1b2"));
// 结果:true
// 支持正则表达式的 String 对象的方法
// search 检索与正则表达式相匹配的值。
console.log("Hello World!".search(/d!$/));
// 结果:10
// match 找到一个或多个正则表达式的匹配。
console.log("Hello World!".match(/d!$/));
// 结果:["d!", index: 10, input: "Hello World!"]
// replace 替换与正则表达式匹配的子串。
console.log("Hello World!".replace(/d!$/, "kkk"));
// split 把字符串分割为字符串数组。
console.log("Hello World! Football!".split(/o+/));
// 结果:["Hell", " W", "rld! F", "tball!"]
})