正则常见函数
正则表达式常用的方法分为 2 类:
- 字符串上调用,进行正则规则匹配。操作对象是正则表达式
- 正则表达式上调用。操作对象是字符串。
准备了下面代码:
1 2 3
| const pattern = /runoob/gi; const str = "Visit Runoob!runoob";
|
① 字符串上调用的方法,常见的有:search
/ match
/ replace
1 2 3 4 5 6
| console.log(str.search(/Runoob/i));
console.log(str.match(/run/gi));
console.log(str.replace(/visit/i, "visit"));
|
② 正则表达式对象上的方法,常见的有:test
/ exec
1 2 3 4
| console.log(pattern.test(str));
console.log(pattern.exec(str));
|
实现千分位标注
题目:实现千分位标注位,考虑小数、负数和整数三种情况。
sep
参数是自定义的分隔符,默认是,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
const addSeparator = (str = "", sep = ",") => { str += ""; const arr = str.split("."), re = /(\\d+)(\\d{3})/; let integer = arr[0], decimal = arr.length <= 1 ? "" : `.${arr[1]}`; while (re.test(integer)) { integer = integer.replace(re, "$1" + sep + "$2"); } return integer + decimal; }; console.log(addSeparator(-10000.23)); console.log(addSeparator(100)); console.log(addSeparator(1234, ";"));
|
全局匹配与lastIndex
题目:请说出下面代码执行结果(为了方便,我将结果注释在代码中了),并且解释。
1 2 3 4 5
| const str = "google"; const re = /o/g; console.log(re.test(str)); console.log(re.test(str)); console.log(re.test(str));
|
由于使用的是全局匹配,因此会多出来lastIndex
这个属性,打印如下:
1 2 3 4 5
| const str = "google"; const re = /o/g; console.log(re.test(str), re.lastIndex); console.log(re.test(str), re.lastIndex); console.log(re.test(str), re.lastIndex);
|
简单理解就是:同一个全局匹配的正则对同一个目标串匹配后,匹配过的部分串将不再匹配。
字符串第一个出现一次的字符
题目:字符串中第一个出现一次的字符
利用字符串的match
方法匹配指定字符:
1 2 3 4 5 6 7 8 9 10 11
| const find_ch = str => { for (let ch of str) { const re = new RegExp(ch, "g"); if (str.match(re).length === 1) { return ch; } } };
console.log(find_ch("google"));
|
除了上述方法,使用indexOf/lastIndexOf
同样可以:
1 2 3 4 5 6 7 8 9
| const find_ch = str => { for (let ch of str) { if (str.indexOf(ch) === str.lastIndexOf(ch)) { return ch; } } };
console.log(find_ch("google"));
|