JavaScript 算法与数据结构 之 正则表达式

JavaScript 算法与数据结构 之 正则表达式

test()测试方法

使用test()方法返回的是布尔值。

  1. 使用测试方法
    正则表达式用于匹配指定的字符串。 test()方法可以匹配字符串中的内容。匹配文字字符串时,区分大小写。
let testStr = "freeCodeCamp";
let testRegex = /Code/;
testRegex.test(testStr);
  1. 同时用多种模式匹配文字字符串
    使用 alternationOR 操作符搜索多个模式: |,可以匹配多个不同的字符串
let petString = "James has a pet cat.";
let petRegex = /dog|cat|pig/; // 修改这一行
let result = petRegex.test(petString);
  1. 匹配时忽略大小写
    使用标志 i 附加到正则表达式之后来使用,可以忽略字符串中的大小写
let myString = "freeCodeCamp";
let fccRegex = /Freec/i; // 修改这一行
let result = fccRegex.test(myString);

match() 提取方法

使用match()方法返回的是提取到的字符串的值

  1. 提取匹配项
    使用字符串来调用 .match() 方法,并在括号内传入正则表达式。
"Hello, World!".match(/Hello/);
let ourStr = "Regular expressions";
let ourRegex = /expressions/;
ourStr.match(ourRegex);
  1. 全局匹配
    简单来说,全局匹配就是匹配所有符合该字符串的字符串,全局搜索标志:g
let testStr = "Repeat, Repeat, Repeat";
let ourRegex1 = /Repeat/g;
testStr.match(ourRegex1);

let ourRegex2 = /repeat/gi;
testStr.match(ourRegex2);
  1. 用通配符匹配任何内容
    通配符.将匹配任何一个字符。 通配符也叫 dot 或 period。
let exampleStr = "Let's have fun with regular expressions!";
let unRegex = /.un/; // 修改这一行
let result = unRegex.test(exampleStr);
  1. 将单个字符与多种可能性匹配
    可以使用字符集 (character classes)更灵活的匹配字符。 可以把字符集放在方括号([])之间来定义一组需要匹配的字符串。
let quoteSample = "Beware of bugs in the above code; I have only proved it correct, not tried it.";
let vowelRegex = /[aeiou]/ig; // 修改这一行
let result = quoteSample.match(vowelRegex); // 修改这一行
  1. 定义匹配字符的范围
    在字符集中,可以使用连字符(-)来定义要匹配的字符范围。
let quoteSample = "The quick brown fox jumps over the lazy dog.";
let alphabetRegex = /[A-Z]/gi; // 修改这一行
let result = quoteSample.match(alphabetRegex); // 修改这一行
  1. 匹配单个未指定的字符
    要创建否定字符集,需要在开始括号后面和不想匹配的字符前面放置脱字符(即^
let quoteSample = "3 blind mice.";
let myRegex = /[^aeiou^0-9]/gi; // 修改这一行
let result = quoteSample.match(myRegex); // 修改这一行
  1. 匹配出现一次或多次的字符
    可以使用 + 符号来检查情况是否如此。 记住,字符或匹配模式必须一个接一个地连续出现。 这就是说,字符必须一个接一个地重复。
let difficultSpelling = "Mississippi";
let myRegex = /s+/g; // 修改这一行
let result = difficultSpelling.match(myRegex);
  1. 匹配出现零次或多次的字符
    执行该操作的字符叫做星号,即*
// 只修改这一行下面的代码
let chewieRegex = /Aa*/g; // 修改这一行
// 只修改这一行上面的代码

let result = chewieQuote.match(chewieRegex);
  1. 贪婪匹配
    贪婪(greedy)匹配会匹配到符合正则表达式匹配模式的字符串的最长可能部分,并将其作为匹配项返回。
    可以将正则表达式 /t[a-z]*i/ 应用于字符串 "titanic"。 这个正则表达式是一个以 t 开始,以 i 结束,并且中间有一些字母的匹配模式。
    正则表达式默认是贪婪匹配,因此匹配返回为 ["titani"]
  2. 用惰性匹配来查找字符
    使用 ? 字符来将其变成懒惰匹配。 调整后的正则表达式 /t[a-z]*?i/ 匹配字符串 "titanic" 返回 ["ti"]
let text = "<h1>Winter is coming</h1>";
let myRegex = /<.*?>/; // 修改这一行
let result = text.match(myRegex);  //<h1>
  1. 匹配字符串的开头
    使用字符集中前插入符号(^)来创建一个否定字符集,形如 [^thingsThatWillNotBeMatched]。 除了在字符集中使用之外,插入符号(^)用于匹配文本是否在字符串的开始位置
let rickyAndCal = "Cal and Ricky both like racing.";
let calRegex = /^Cal/; // 修改这一行
let result = calRegex.test(rickyAndCal);
  1. 匹配字符串的结尾
    可以使用正则表达式的美元符号 $ 来搜寻字符串的结尾。
let caboose = "The last car on a train is the caboose";
let lastRegex = /caboose$/; // 修改这一行
let result = lastRegex.test(caboose);
  1. 匹配所有的字母和数组
    JavaScript 中与字母表匹配的最接近的元字符是\w。 这个缩写等同于[A-Za-z0-9_]。 此字符类匹配大写字母和小写字母以及数字。 注意,这个字符类也包含下划线字符 (_)
let quoteSample = "The five boxing wizards jump quickly.";
// 使用元字符 \w 来计算所有引号中字母和数字字符的数量。
let alphabetRegexV2 = /\w/g; // 修改这一行
let result = quoteSample.match(alphabetRegexV2).length;
  1. 匹配除了字母和数字的所有符号
    \W用来匹配和\w相反的符号
let quoteSample = "The five boxing wizards jump quickly.";
// 使用缩写 \W 来计算引号中所有非字符字母和数字字符的数量。
let nonAlphabetRegex = /\W/g; // 修改这一行
let result = quoteSample.match(nonAlphabetRegex).length;

15、匹配所有的数字
查找数字字符的缩写是 \d

let movieName = "2001: A Space Odyssey";
let numRegex = /\d/g; // 修改这一行
let result = movieName.match(numRegex).length;

16、匹配所有的非数字
查找非数字字符的缩写是 \D

let movieName = "2001: A Space Odyssey";
let noNumRegex = /\D/g; // 修改这一行
let result = movieName.match(noNumRegex).length;
  1. 匹配空白字符
    使用 \s 搜寻空格,其中 s 是小写。 此匹配模式将匹配空格、回车符、制表符、换页符和换行符。
let sample = "Whitespace is important in separating words";
let countWhiteSpace = /\s/g; // 修改这一行
let result = sample.match(countWhiteSpace);
  1. 匹配非空白字符
    使用 \S 搜寻非空白字符
let sample = "Whitespace is important in separating words";
let countNonWhiteSpace = /\S/g; // 修改这一行
let result = sample.match(countNonWhiteSpace);
  1. 指定匹配的上限和下限
    可以使用数量说明符(quantity specifiers)指定匹配模式的上下限。 数量说明符与花括号({})一起使用。 可以在花括号之间放两个数字,这两个数字代表匹配模式的上限和下限。
let ohStr = "Ohhh no";
// 修改正则表达式 ohRegex 以匹配出现 3 到 6 次字母 h 的字符串 Oh no
let ohRegex = /Oh{3,6}\sno/; // 修改这一行
let result = ohRegex.test(ohStr);
  1. 只指定匹配的下限
    可以使用带有花括号的数量说明符来指定匹配模式的上下限。 但有时候只想指定匹配模式的下限而不需要指定上限。为此,在第一个数字后面跟一个逗号即可。
let haStr = "Hazzzzah";
let haRegex = /Haz{4,}ah/; // 修改这一行
let result = haRegex.test(haStr);
  1. 指定匹配的确切数量
    可以使用带有花括号的数量说明符来指定匹配模式的上下限。 但有时只需要特定数量的匹配。要指定一定数量的匹配模式,只需在大括号之间放置一个数字。
let timStr = "Timmmmber";
// 修改正则表达式timRegex,以匹配仅有四个字母 m 的单词 Timber。
let timRegex = /Tim{4}ber/; // 修改这一行
let result = timRegex.test(timStr);
  1. 检查全部或无
    有时,想要搜寻的匹配模式可能有不确定是否存在的部分。为此,可以使用问号 ? 指定可能存在的元素。 这将检查前面的零个或一个元素。 可以将此符号视为前面的元素是可选的。
let favWord = "favorite";
// 修改正则表达式 favRegex 以匹配美式英语(favorite)和英式英语(favourite)的单词版本。
let favRegex = /favou?rite/; // 修改这一行
let result = favRegex.test(favWord);
  1. 正向先行断言和负向先行断言
    正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。 正向先行断言的用法是 (?=...),其中 … 就是需要存在但不会被匹配的部分。
    另一方面,负向先行断言会查看并确保搜索匹配模式中的元素不存在。 负向先行断言的用法是 (?!...),其中 … 是希望不存在的匹配模式。 如果负向先行断言部分不存在,将返回匹配模式的其余部分。
let sampleWord = "astronaut";
// 在正则表达式 pwRegex 中使用先行断言以匹配大于 5 个字符且有两个连续数字的密码。
let pwRegex = /(?=\w{6,})(?=\D*\d\d+)/; // 修改这一行
let result = pwRegex.test(sampleWord);
  1. 检查混合字符组
    使用正则表达式里的括号 () 来检查字符组
let testStr = "Pumpkin";
let testRegex = /P(engu|umpk)in/;
testRegex.test(testStr);
  1. 使用捕获组重用模式
    捕获组是通过把要捕获的正则表达式放在括号中来构建的。 在这个例子里, 目标是捕获一个包含字母数字字符的词,所以捕获组是将 \w+ 放在括号中:/(\w+)/
    分组匹配的子字符串被保存到一个临时的“变量”, 可以使用同一正则表达式和反斜线及捕获组的编号来访问它(例如:\1
let repeatNum = "42 42 42";
// 在 reRegex 中使用捕获组来匹配一个只由相同的数字重复三次组成的由空格分隔字符串。
let reRegex = /^(\d+)\s\1\s\1$/; // 修改这一行
let result = reRegex.test(repeatNum);
  1. 使用捕获组搜索和替换
    可以在字符串上使用 .replace() 方法来搜索并替换字符串中的文本。 .replace() 的输入首先是想要搜索的正则表达式匹配模式。 第二个参数是用于替换匹配的字符串或用于执行某些操作的函数。
    还可以使用美元符号($)访问替换字符串中的捕获组。
let str = "one two three";
// 使用三个捕获组编写一个正则表达式 fixRegex,这三个捕获组将搜索字符串 one two three 中的每个单词。 然后更新 replaceText 变量,以字符串 three two one 替换 one two three,并将结果分配给 result 变量。 确保使用美元符号($)语法在替换字符串中使用捕获组。
let fixRegex = /(\w+)\s(\w+)\s(\w+)/; // 修改这一行
let replaceText = "$3 $2 $1"; // 修改这一行
let result = str.replace(fixRegex, replaceText);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值