JS基础整理(五) - 正则

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?"]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值