正则关卡8:单个字符多可能性匹配

正则表达式测试工具

文字匹配模式(/literal/)和通配符(/./),
是正则表达式的两种极端情况,一种是精确匹配,而另一种则是匹配所有。
在这两种极端情况之间有一个平衡选项。
我们可以使用字符集搜寻指定的文字匹配模式。
我们可以把字符集放在方括号([])之间来定义一组需要匹配的字符串。
例如,如果想要匹配"bag""big""bug",但是不想匹配"bog"
可以创建正则表达式/b[aiu]g/来执行此操作。

[aiu]是只匹配字符"a""i"或者"u"的字符集。

var bigStr = "big";
var bagStr = "bag";
var bugStr = "bug";
var bogStr = "bog";
var bgRegex = /b[aiu]g/;
console.log( bigStr.match(bgRegex) ); // 返回 ["big"]
console.log( bagStr.match(bgRegex) ); // 返回 ["bag"]
console.log( bugStr.match(bgRegex) ); // 返回 ["bug"]
console.log( bogStr.match(bgRegex) ); // 返回 null

闯关:使用元音字符集(aeiou)在正则表达式vowelRegex中匹配到字符串quoteSample中的所有元音。
注意一定要同时匹配大小写元音。

var quoteSample = "When you were born,you were crying and everyone around you was smiling.";
var vowelRegex = /change/; // 修改这行
var result = vowelRegex; // 修改这行
console.log(result);

正确代码

var quoteSample = "When you were born,you were crying and everyone around you was smiling.";
var vowelRegex = /[aeiou]/ig; 
var result = quoteSample.match(vowelRegex);

正则关卡7:用通配符 . 匹配任何内容

正则表达式测试工具

我们有时并不知道匹配模式中的确切字符。
如果要精确匹配到完整的单词,那出现一个拼写错误就会匹配不到。
这时可以使用通配符.来处理这种情况。
通配符.将匹配任何一个字符。
可以像使用正则表达式中任何其他字符一样使用通配符。
例如,如果想匹配"hug""huh""hut""hum",可以使用正则表达式/hu./匹配以上四个单词。

var humStr = "I'll hum a song";
var hugStr = "Bear hug";
var huRegex = /hu./;
var humRes = huRegex.test(humStr); // 返回 true
var hugRes = huRegex.test(hugStr); // 返回 true
console.log(humRes); // 在控制台中输出
console.log(hugRes); 

闯关:完成正则表达式unRegex以匹配字符串"run""sun""fun""pun""nun""bun"
正则表达式中应该使用通配符。

var exampleStr = "Let's have fun with regular expressions!";
var unRegex = /change/; // 修改这行
var result = unRegex.test(exampleStr);
console.log(result);

正确代码

var exampleStr = "Let's have fun with regular expressions!";
var unRegex = /.un/; 
var result = unRegex.test(unRegex);
console.log(result);

正则关卡6:全局匹配

正则表达式测试工具

到目前为止,只能提取或搜寻一次模式匹配。

var testStr = "Repeat, Repeat, Repeat";
var ourRegex = /Repeat/;
var repetMatch = testStr.match(ourRegex); // 返回 ["Repeat"]
console.log(repetMatch); // 在控制台中输出, 请在浏览器控制台查看

若要​多次搜寻​或​提取模式匹配​,可以使用g标志。

var testStr = "Repeat, Repeat, Repeat";
var repeatRegex = /Repeat/g;
var repetMatch = testStr.match(repeatRegex); 
// 返回 ["Repeat", "Repeat", "Repeat"]
console.log(repetMatch); // 在控制台中输出, 请在浏览器控制台查看

闯关:

使用正则表达式starRegex,从字符串twinkleStar中匹配到所有的"Twinkle"单词并提取出来。
注意:在正则表达式上可以有多个标志,比如/search/gi

var twinkleStar = "Twinkle, twinkle, little star";
var starRegex = /Twinkle/ig; // 修改这行
var result = twinkleStar.match(starRegex); // 修改这行
console.log(result);

正确代码

var twinkleStar = "Twinkle, twinkle, little star";
var starRegex = /Twinkle/ig;
var result = twinkleStar.match(starRegex);
console.log(result);

正则关卡5:使用 match() 方法提取匹配项

正则表达式测试工具

match() ​方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

该方法类似 ​indexOf() ​和 ​lastIndexOf()​,但是它返回指定的值,而不是字符串的位置。

可以使用字符串来调用match()方法,并在括号内传入正则表达式。
例如:

var matchArr = "Hello, World!".match(/Hello/); // 返回 ["Hello"]
console.log(matchArr);
var ourStr = "Regular expressions";
var ourRegex = /expressions/;
var ourArr = ourStr.match(ourRegex); // 返回 ["expressions"]
console.log(ourArr);

控制台运行截图:

闯关:利用.match()方法提取单词coding

var extractStr = "Extract the word 'coding' from this string.";
var codingRegex = /change/; // 修改这行
var result = extractStr; // 修改这行
console.log(result);

正确代码

var extractStr = "Extract the word 'coding' from this string.";
var codingRegex = /coding/; 
var result = extractStr.match(codingRegex); 
console.log(result);

正则关卡4:忽略大小写

正则表达式测试工具

有些时候,我们并不关注匹配字母的大小写。
我们可以使用忽略大小写的标志——i
可以通过将 ​​附加到正则表达式之后来使用。
例如/ignorecase/i,可以匹配字符串"ignorecase""igNoreCase""IgnoreCase"

var testStr = "igNoreCase";
var testRegex = /ignorecase/i;
var igRes = testRegex.test(testStr); // 返回 true
console.log(igRes); // 请在控制台中查看结果

闯关:编写正则表达式 ​testRegex​ 以匹配"w3cschool",忽略大小写。

正则表达式不应与任何缩写或带有空格的变体匹配。

ar myString = "w3cschool APP";
var testRegex = /change/; // 修改这行
var result = testRegex.test(myString);
console.log(result);

正确代码

var myString = "w3cschool APP";
var testRegex = /w3cschool/i; 
var result = testRegex.test(myString);
console.log(result);

正则关卡3:匹配多种可能性的文字字符串

正则表达式测试工具

使用正则表达式/coding/,你可以在其他字符串中查找"coding"
这对于搜寻单个字符串非常有用,但仅限于一种匹配模式。
你可以使用|操作符来匹配多个规则。
此操作符匹配操作符前面或后面的字符。
例如,如果你想匹配"yes""no",你需要的正则表达式是/yes|no/
你还可以匹配多个规则,这可以通过添加更多的匹配模式来实现。
这些匹配模式将包含更多的|操作符来分隔它们,比如/yes|no|maybe/

var str = 'You Have Only One Life';
var reg = /Only|Life/;
var regRes = reg.test(str); // 返回 true
console.log(regRes); // 请打开控制台查看
// 在chrome浏览器可以按F12快捷键,切换到Console查看

闯关:完成正则表达式petRegex以匹配"dog""cat""bird"或者"fish"

var petString = "Loen has a pet cat.";
var petRegex = /change/; // 修改这行
var result = petRegex.test(petString);
console.log(result);

正确代码

var petString = "Loen has a pet cat.";
var petRegex = /dog|cat|bird|fish/;
var result = petRegex.test(petString);
console.log(result);