-
打个分吧:

正则自检清单

正则是程序员必备的效率生产力知识~

2分钟阅读
-
-

正则原型test方法

let myString = "Hello, World!";
let myRegex = /Hello/;
let result = myRegex.test(myString);

或操作符|

let waldoIsHiding = "Somewhere Waldo is hiding in this text.";
let waldoRegex = /Waldo/;
let result = waldoRegex.test(waldoIsHiding);

正则标志

  • 标志i:忽略大小写
  • 标志g:全局匹配(多次匹配)

字符串原型方法:match

  • 在字符串上使用.match()方法将返回一个数组,其中包含它匹配的字符串及其捕获组。
"Hello, World!".match(/Hello/);
// Returns ["Hello"]

通配符:.(点)

字符集匹配:[]

let vowelRegex = /[aeiou]/gi;
let result = quoteSample.match(vowelRegex);

字符集 连字符:- 字符范围

let quoteSample = "The quick brown fox jumps over the lazy dog.";
let alphabetRegex = /[a-z]/gi;
let result = quoteSample.match(alphabetRegex);

否定字符集:^

  • /[^1-9]/g 匹配所有非数字字符

+*?^$

  • +:一次或多次
  • *:0次或多次
  • ?:0次或1次
  • 字符串开头:^
  • 字符串结尾:$

贪婪匹配 & 惰性匹配

  • 贪婪匹配:正则默认贪婪匹配,匹配满足表达式的最长部分
  • 惰性匹配:匹配满足表达式的最小部分:加?
let text = "<h1>Winter is coming</h1>";
let myRegex = /<.*?1>/;
let result = text.match(myRegex);
console.log(result);

字符集

  • \w : [A-Za-z0-9_] 数字字母下划线
  • \W: [^A-Za-z0-9_] 反匹配模式
  • \d: [0-9] 数字
  • \D: [^0-9] 非数字
  • \s: [\r\t\f\n\v] 空格 回车 制表符 换行 换页
  • \S: [^\r\t\f\n\v]

匹配的数量上下限

  • {m,n}最少m个,最多n个
  • {m}指定m个
  • {m,}最少m个
  • {,n}最多n个

先行断言:在字符串中向前查找的匹配模式。

  • 正向先行断言:会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。
  • 用法是(?=...),其中...就是需要存在但不会被匹配的部分。
  • 负向先行断言:会查看并确保搜索匹配模式中的元素不存在。
  • 用法是(?!...),其中...是你希望不存在的匹配模式。如果负向先行断言部分不存在,将返回匹配模式的其余部分。

例子:

  • 3 到 6 个字符且至少包含一个数字:
let password = "abc123";
let checkPass = /(?=\w{3,6})(?=\D*\d)/;
checkPass.test(password); // Returns true
  • 至少5个字符且有连续两个数字的密码:
let sampleWord = "astronaut";
let pwRegex = /(?=\w{5,})(?=\D*\d{2}\D*)/;
let result = pwRegex.test(sampleWord);
  • 在vscode中正则搜索“未添加scoped属性的<style>标签”
<style(?!.*scoped)

捕获组:重用子字符串

  • ()来表示捕获组,匹配第一次出现的子字符串
  • \n来表示第n个捕获组,n是数字,表示第n个捕获组
let repeatStr = "regex regex";
let repeatRegex = /(\w+)\s\1/;
repeatRegex.test(repeatStr); // Returns true
repeatStr.match(repeatRegex); // Returns ["regex regex", "regex"]

字符串原型方法replace:捕获组 搜索/替换

  • .replace()的输入首先是你想要搜索的正则表达式匹配模式,

  • 第二个参数是用于替换匹配的字符串或用于执行某些操作的函数。

  • 第二个参数中,可以用$n访问替换字符串中的捕获组(即用括号括起来的组)

  • 其中n表示第n个捕获组

  • 例子:

"Code Camp".replace(/(\w+)\s(\w+)/, "$2 $1");
// Returns "Camp Code"
  • 去除字符串两端的空格
let hello = "   Hello, World!  ";
let wsRegex = /^\s+(\S.*\S)\s+$/;
let result = hello.replace(wsRegex, "$1");
上次更新:

评论区