1、修饰符:
i (执行对大小写不敏感的匹配) | g(执行全局匹配,查找所有匹配而非在找到第一个匹配后停止) | m(执行多行匹配) |
var str = "Mr. Blue loves blue flowers."
console.log(str.match(/blue/i)); //["Blue", index: 4, input: "Mr. Blue loves blue flowers.", groups: undefined]
console.log(str.match(/blue/g)); //["blue"]
console.log(str.match(/blue/gi)); //进行全局且大小写不敏感的搜索["Blue", "blue"]
2、方括号:用于查找某个范围内的字符:
[abc] 表达式用于查找方括号之间的任何字符。 | [^abc] 表达式用于查找任何不在方括号之间的字符。 |
[0-9] 查找任何从 0 至 9 的数字。 | [a-z] 查找任何从小写 a 到小写 z 的字符。 |
[A-z] 查找任何从大写 A 到小写 z 的字符。 | [A-Z] 查找任何从大写 A 到大写 Z 的字符。 |
[adgk] 查找给定集合内的任何字符。 | [^adgk] 查找给定集合外的任何字符。 |
(red|blue|green) 查找任何指定的选项。 |
3、元字符:
. 元字符用于查找单个字符,除了换行和行结束符。 | \d 元字符用于查找数字字符。 |
\w 元字符用于查找单词字符。单词字符包括:a-z、A-Z、0-9,以及下划线, 包含 _ (下划线) 字符。 | \D 元字符用于查找非数字字符。 |
\W 元字符用于查找非单词字符。 | \n 元字符用于查找换行符。返回换行符被找到的位置。如未找到返回 -1。 |
\s 元字符用于查找空白字符。包括:空格符、制表符、回车符、换行符、垂直换行符、换页符 | \xxx 元字符用于查找以八进制数 xxx 规定的字符。 |
\S 元字符用于查找非空白字符。 | \xdd 元字符查找以十六进制数 dd 规定的字符。 |
\b 元字符匹配单词边界。常用于查找位于单词的开头或结尾的匹配 | \uxxxx 元字符用于查找以十六进制数 xxxx 规定的 Unicode 字符。 |
\B 元字符匹配非单词边界。匹配位置的上一个和下一个字符的类型是相同的:即必须同时是单词,或必须同时是非单词字符。字符串的开头和结尾处被视为非单词字符。 | \0查找 NULL 字符。\f查找换页符。\r查找回车符。\t查找制表符。\v查找垂直制表符。 |
//对字符串中的 "h.t" 进行全局搜索
console.log("That's hot! hoot".match(/h.t/g)); //["hat", "hot"]
//对字符串中的单词字符进行全局搜索
console.log("That's hot".match(/\w/g)); //["T", "h", "a", "t", "s", "h", "o", "t"]
//对字符串中的非单词字符进行全局搜索
console.log("Good 100%".match(/\W/g)); //[" ", "%"]
//对数字进行全局搜索
console.log("Good 100%".match(/\d/g)); //["1", "0", "0"]
//对字符串中的非数字字符进行全局搜索
console.log("Good 100%".match(/\D/g)); //["G", "o", "o", "d", " ", "%"]
//对字符串中的空白字符进行全局搜索
console.log("Good 100%".match(/\s/g)); //[" "]
console.log("Is this all there is?".match(/\s/g)); // [" ", " ", " ", " "]
//对字符串中的非空白字符进行全局搜索
console.log("Good 100%".match(/\S/g)); //["G", "o", "o", "d", "1", "0", "0", "%"]
//对字符串中的单词的开头或结尾进行 "Run" 的全局搜索
console.log("Visit Runooob".match(/\bRun/g)); //["Run"]
console.log("Is this all there is?".match(/\bis/g)); //["is"]
console.log("Is this all there is?".match(/\bis/gi)); //["Is", "is"]
//对字符串中不位于单词开头或结尾的 "noob" 进行全局搜索
console.log("Visit Runoob".match(/\Bnoob/g)); //["noob"]
4、量词:
n+ 量词匹配包含至少一个 n 的任何字符串。 | n{X} 量词匹配包含 X 个 n 的序列的字符串。X 必须是数字。 |
n* 量词匹配包含零个或多个 n 的任何字符串。 | n{X,} 量词匹配包含至少 X 个 n 的序列的字符串。X 必须是数字。 |
n? 量词匹配任何包含零个或一个 n 的字符串。 | n{X,Y} X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。 |
n$ 量词匹配任何结尾为 n 的字符串。 | ^n量词匹配任何开头为 n 的字符串。 |
?=n 量词匹配任何其后紧接指定字符串 n 的字符串。 | ?!n 量词匹配其后没有紧接指定字符串 n 的任何字符串。 |
//对至少一个 "o" 进行全局搜索
console.log("Hellooo World! Hello Runoob!".match(/o+/g)); //["ooo", "o", "o", "oo"]
//对至少一个单词字符进行全局搜索
console.log("Hellooo World! Hello Runoob!".match(/\w+/g)); //["Hellooo", "World", "Hello", "Runoob"]
console.log("Hellooo World! Hello W3Schools!".match(/lo*/g)); //["l", "looo", "l", "l", "lo", "l"]
console.log("1, 100 or 1000?".match(/10*/g)); //["1", "100", "1000"]
//对 "1" 进行全局搜索,包括其后紧跟的零个或一个 "0"
console.log("1, 100 or 1000?".match(/10?/g)); //["1", "10", "10"]
//对包含四位数字序列的子串进行全局搜索
console.log("100, 1000 or 10000?".match(/\d{4}/g)); //["1000", "1000"]
//对包含至少三位数字序列的子串进行全局搜索
console.log("100, 1000 or 10000?".match(/\d{3,}/g)); //["100", "1000", "10000"]
//对包含1位或3位数字序列的子串进行全局搜索
console.log("cndy".match(/a{1,3}/)); //null
console.log("candy".match(/a{1,3}/)); //["a", index: 1, input: "candy", groups: undefined]
console.log("caaaaaaandy".match(/a{1,3}/)); //["aaa", index: 1, input: "caaaaaaandy", groups: undefined]
//对字符串结尾的 "is" 进行全局搜索:
console.log("Is this his".match(/is$/g)); //["is"]
//对字符串开头的 "Is" 进行全局搜索
console.log("Is this his".match(/^Is/g)); //["Is"]
//对其后紧跟 "all" 的 "is" 进行全局搜索
console.log("Is this all there is".match(/is(?= all)/)); //["is", index: 5, input: "Is this all there is", groups: undefined]
//对其后没有紧跟 "all" 的 "is" 进行全局搜索
console.log("Is this all there is".match(/is(?! all)/gi)); //["Is", "is"]
5、对象方法:
exec() 方法用于检索字符串中的正则表达式的匹配。
//在字符串中全局搜索 "Hello" 和 "RUNOOB" 字符串
console.log(/Hello/g.exec("Hello world! Hello Lucy")); //["Hello", index: 0, input: "Hello world! Hello Lucy", groups: undefined]
console.log(/run/g.exec("Hello world!")); // null
test() 方法用于检测一个字符串是否匹配某个模式。如果字符串中有匹配的值返回 true ,否则返回 false。
//在字符串中全局搜索 "Hello" 和 "Runoob" 字符串
console.log(/Hello/g.test("Hello world! Hello Lucy!")); //true
console.log(/run/g.test("Hello world! Hello Lucy!")); //false
toString() 方法返回正则表达式的字符串值。
6、支持正则的String对象的方法:
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
//查找 "Runoob"
console.log("Visit Runoob!".search("Runoob")); // 6
//执行一次对大小写敏感的查找:
console.log("Mr. Blue has a blue house".search("blue")); //15
//执行一次忽略大小写的检索:
console.log("Mr. Blue has a blue house".search(/blue/i)); //4
//执行一个全局替换, 忽略大小写
console.log("Mr Blue has a blue house and a blue car.".replace(/blue/g, "red")); //Mr Blue has a red house and a red car.
console.log("Mr Blue has a blue house and a blue car.".replace(/blue/gi, "red")); //Mr red has a red house and a red car.
// 通过 prototype 为 JavaScript 的 String 对象添加方法,来实现将所有 "Microsoft" 替换为 "Runoob"
String.prototype.replaceAll = function(search, replacement){
let target = this;
return target.replace(new RegExp(search, 'g'), replacement);
}
console.log("Visit Microsoft!Visit Microsoft!Visit Microsoft!".replaceAll("Microsoft","Runoob")); //Visit Runoob!Visit Runoob!Visit Runoob!
split() 方法用于把一个字符串分割成字符串数组。如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。不改变原始字符串。
//省略分割参数
console.log("How are you?".split()); //["How are you?"]
//分割每个字符,包括空格:
console.log("How are you?".split("")); //["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", "?"]
console.log("How are you?".split(" ", 2)); //["How", "are"]
//使用一个字符作为分隔符
console.log("How are you doing today?".split("o")); //["H", "w are y", "u d", "ing t", "day?"]