正则关卡22:匹配空白字符

正则表达式测试工具

接下来我们学习匹配字母之间的空格。
可以使用\s搜寻空格,其中s是小写。
此匹配模式不仅匹配空格,还匹配回车符、制表符、换页符和换行符,可以将其视为与[\r\t\f\n\v]类似。

var whiteSpace = "Whitespace. Whitespace everywhere!"
var spaceRegex = /\s/g;
console.log( whiteSpace.match(spaceRegex) ); // 返回 [" ", " "] 

闯关:修改正则表达式countWhiteSpace查找字符串中的多个空白字符。

var sample = "Whitespace is important in separating words";
var countWhiteSpace = /change/; // 修改这行
var result = sample.match(countWhiteSpace);
console.log(result);

正确代码

var sample = "Whitespace is important in separating words";
var countWhiteSpace = /\s+/g;
var result = sample.match(countWhiteSpace);
console.log(result);

正则关卡21:限制可能的用户名

正则表达式测试工具

用户名在互联网上随处可见。
它们是用户在自己喜欢的网站上的唯一身份。
需要检索数据库中的所有用户名。
以下是用户在创建用户名时必须遵守的一些简单规则。
1) 用户名只能是数字字母字符。
2) 用户名中的数字必须在最后,且数字可以有零个或多个。
3) 用户名字母可以是小写字母和大写字母。
4) 用户名长度必须至少为两个字符。
两位用户名只能使用字母。

闯关:修改正则表达式userCheck以适合上面列出的约束。

var username = "JackOfAllTrades";
var userCheck = /change/; // 修改这行
var result = userCheck.test(username);
console.log(result);

正确代码

var username = "JackOfAllTrades";
var userCheck = /^[a-z]([0-9]{2,}|[a-z]+\d*)$/i; // 修改这行
var result = userCheck.test(username);
var result1 = username.match(userCheck);
console.log(result);
console.log(result1);

正则关卡20:匹配所有非数字

正则表达式测试工具

我们可以使用带有小写d的缩写\d来搜寻数字。
我们也可以使用类似的缩写来搜寻非数字,该缩写使用大写的D
查找非数字字符的缩写是\D

这等同于字符串[^0-9],它查找不是 0 – 9 之间数字的单个字符。

var str = "This building is 400 meters high.";
var reg1 = /\D/;
var reg2 = /[^0-9]/;
console.log( str.match(reg1) ); // 返回 ["T"]
console.log( str.match(reg2) ); // 返回 ["T"]

闯关:使用非数字缩写\D来计算电影标题中有多少非数字。

var movieName = "2001: A Space Odyssey";
var noNumRegex = /change/; // 修改这行
var result = movieName.match(noNumRegex);
console.log(result);

正确代码

var movieName = "2001: A Space Odyssey";
var noNumRegex = /\D/g;
var result = movieName.match(noNumRegex);
console.log(result);

正则关卡19:匹配所有数字

正则表达式测试工具

另一个常见的匹配模式是只寻找数字。
查找数字字符的缩写是\d,注意是小写的d
这等同于元字符[0-9],它查找 0 到 9 之间任意数字的单个字符。

var str = "This building is 400 meters high.";
var reg1 = /\d/;
var reg2 = /[0-9]/;
console.log( str.match(reg1) ); // 返回 ["4"]
console.log( str.match(reg2) ); // 返回 ["4"]

闯关:使用缩写\d来计算电影标题中有多少个数字。
书面数字(”six” 而不是 6)不计算在内。

var movieName = "2001: A Space Odyssey";
var numRegex = /change/; // 修改这行
var result = movieName.match(numRegex);
console.log(result);

正确代码

var movieName = "2001: A Space Odyssey";
var numRegex = /\d/g;
var result = movieName.match(numRegex);
console.log(result);

正则关卡18:匹配所有的字母和数字

正则表达式测试工具

使用​元字符​,可以使用[a-z]搜寻字母表中的所有字母。
这种元字符是很常见的,它有一个缩写,但这个缩写也包含额外的字符。
JavaScript 中与字母表匹配的最接近的元字符是\w,这个缩写等同于[A-Za-z0-9_]
它不仅可以匹配大小写字母和数字,​注意​,它还会匹配下划线字符(_)。

var longHand = /[A-Za-z0-9_]+/;
var shortHand = /\w+/;
var numbers = "58";
var varNames = "important_var";

console.log( longHand.test(numbers) ); // 返回 true
console.log( shortHand.test(numbers) ); // 返回 true
console.log( longHand.test(varNames) ); // 返回 true
console.log( shortHand.test(varNames) ); // 返回  true

闯关:使用缩写\w来计算所有引号中字母和数字字符的数量。

var quoteSample = "The five boxing wizards jump quickly.";
var alphabetRegexV2 = /change/; // 修改这行
var result = quoteSample.match(alphabetRegexV2);
console.log(result);

正确代码

var quoteSample = "The five boxing wizards jump quickly.";
var alphabetRegexV2 = /\w/g;
var result = quoteSample.match(alphabetRegexV2);
console.log(result);

正则关卡17:匹配字符串的末尾

正则表达式测试工具

在上一个挑战中,学习了使用^符号来搜寻字符串开头的匹配模式。
还有一种方法可以搜寻字符串末尾的匹配模式。
可以使用正则表达式的美元符号$来搜寻字符串的结尾。

var theEnding = "This is a never ending story";
var storyRegex = /story$/;
console.log( storyRegex.test(theEnding) ); // 返回 true

var noEnding = "Sometimes a story will have to end";
console.log( storyRegex.test(noEnding) ); // 返回 false

闯关:使用$在字符串caboose的末尾匹配"caboose"

var caboose = "The last car on a train is the caboose";
var lastRegex = /change/; // 修改这行
var result = lastRegex.test(caboose);
console.log(result);

正确代码

var caboose = "The last car on a train is the caboose";
var lastRegex = /caboose$/;
var result = lastRegex.test(caboose);
console.log(result);