functionverify(regexp, yes, no) { // Ignore unfinished exercises if (regexp.source == "...") return; for (let str of yes) if (!regexp.test(str)) { console.log(`Failure to match '${str}'`); } for (let str of no) if (regexp.test(str)) { console.log(`Unexpected match for '${str}'`); } }
Quoting style
将句子中的单引号换成双引号,但是单词缩写不能变,比如“aren’t”
这里调试了半天,因为我错误的将|写成中文的|了。。。
(^|\W):匹配开头或非字母字符后面的单引号。
(\W|$):匹配单引号后面紧跟非字母字符或字符串结尾。
1 2 3 4
let text = "'I'm the cook,' he said, 'it's my job.'"; // Change this call. console.log(text.replace(/(^|\W)'|'(\W|$)/g,'$1"$2')); // → "I'm the cook," he said, "it's my job."
Numbers again
为了编写一个匹配JavaScript风格数字的正则表达式,我们需要支持以下特性:
可选的正负号
可选的十进制点
指数表示法(e或E),以及可选的正负号
以下是我们可以遵循的步骤:
可选的正负号:[+-]?
整数和小数部分:
整数部分:\d*
小数部分:\.\d+
指数部分:e[+-]?\d+
将这些部分组合在一起,我们得到一个正则表达式来匹配JavaScript风格的数字:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
let number = /^[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?$/;
// Tests: for (let str of ["1", "-1", "+15", "1.55", ".5", "5.", "1.3e2", "1E-4", "1e+12"]) { if (!number.test(str)) { console.log(`Failed to match '${str}'`); } } for (let str of ["1a", "+-1", "1.2.3", "1+1", "1e4.5", ".5.", "1f5", "."]) { if (number.test(str)) { console.log(`Incorrectly accepted '${str}'`); } }