前端学正则
语法
/正则表达式主体/修饰符
其中修饰符是可选的。
实例:
var patt = /test/i
- /test/i 是一个正则表达式。
- test 是一个正则表达式主体 (用于检索)。
- i 是一个修饰符 (含义是搜索不区分大小写)。
正则表达式修饰符
修饰符
修饰符用于执行区分大小写和全局匹配:
| 修饰符 | 描述 |
|---|---|
| i | 执行对大小写不敏感的匹配。 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
| m | 执行多行匹配。 |
示例g:
const str = 'abc123def456ghi789';
const regex = /def456/g;
方括号
方括号用于查找某个范围内的字符:
| 表达式 | 描述 | | --- | --- | --- | --- | | [abc] | 查找方括号之间的任何字符。 | | [[^abc]](www.runoob.com/jsref/jsref…) | 查找任何不在方括号之间的字符。 | | [0-9] | 查找任何从 0 至 9 的数字。 | | [a-z] | 查找任何从小写 a 到小写 z 的字符。 | | [A-Z] | 查找任何从大写 A 到大写 Z 的字符。 | | [A-z] | 查找任何从大写 A 到小写 z 的字符。 | | [adgk] | 查找给定集合内的任何字符。 | | [^adgk] | 查找给定集合外的任何字符。 | | (red | blue | green) | 查找任何指定的选项。 |
示例 [0-9] :
在正则表达式中,[0-9] 是一个字符集合,用于匹配任何一个在 0 到 9 之间的数字字符。
const str = 'abc123def456ghi789';
const regex = /[0-9]/g;
const matches = str.match(regex);
console.log(matches);
在这个例子中,正则表达式 /[0-9]/g 会匹配字符串 str 中的所有单个数字字符,并返回一个包含所有匹配结果的数组。每个数组元素都是一个匹配到的数字字符。
match下文有介绍
元字符
元字符(Metacharacter)是拥有特殊含义的字符:
| 元字符 | 描述 |
|---|---|
| . | 查找单个字符,除了换行和行结束符。 |
| \w | 查找数字、字母及下划线。 |
| \W | 查找非单词字符。 |
| \d | 查找数字。 |
| \D | 查找非数字字符。 |
| \s | 查找空白字符。 |
| \S | 查找非空白字符。 |
| \b | 匹配单词边界。 |
| \B | 匹配非单词边界。 |
| \0 | 查找 NULL 字符。 |
| \n | 查找换行符。 |
| \f | 查找换页符。 |
| \r | 查找回车符。 |
| \t | 查找制表符。 |
| \v | 查找垂直制表符。 |
| \xxx | 查找以八进制数 xxx 规定的字符。 |
| \xdd | 查找以十六进制数 dd 规定的字符。 |
| \uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符。 |
示例\d 元字符
\d 是一个元字符,用于匹配任何一个十进制数字,等价于 [0-9]。这意味着它会匹配字符串中的 '0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8' 或 '9'。
onst str = "我的电话号码是123-456-7890";
const regex = /\d/g;
const matches = str.match(regex);
console.log(matches);
在这个例子中,正则表达式 /\d/g 会匹配字符串 str 中的所有单个数字字符,并返回一个包含所有匹配结果的数组。
量词
| 量词 | 描述 |
|---|---|
| n+ | 匹配任何包含至少一个 n 的字符串。例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。 |
| n* | 匹配任何包含零个或多个 n 的字符串。例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 |
| n? | 匹配任何包含零个或一个 n 的字符串。例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。 |
| n{X} | 匹配包含 X 个 n 的序列的字符串。例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。 |
| n{X,} | X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 |
| n{X,Y} | X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。 |
| n$ | 匹配任何结尾为 n 的字符串。 |
| [^n](www.runoob.com/jsref/jsref…) | 匹配任何开头为 n 的字符串。 |
| ?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
| ?!n | 匹配任何其后没有紧接指定字符串 n 的字符串。 |
示例 量词( + ):
假设我们有一个字符串,包含了一些单词、数字以及特殊字符,我们想要找出所有由一个或多个连续字母数字字符(字母或数字)组成的序列。
const str = "kljshhh!@#test456";
const regex = /\w+/g;
const matches = str.match(regex);
console.log(matches);
search() 方法
search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回第一次出现的位置(索引)。如果未找到匹配项,则返回 -1。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>正则的练习</title>
</head>
<body>
<script type="text/javascript">
var str = "Hello World!";
let index = str.search(/llo/i);
console.log(index)
</script>
</body>
</html>
replace() 方法
replace() 方法是一个非常实用的字符串方法,用于在字符串中查找一个匹配项,并将其替换为新的子串。下面展示一些常用 使用场景的示例:
- 替换字符串中的特定字符
let str = "Hello, world!";
let newStr = str.replace("world", "快乐就是哈哈哈");
console.log(newStr);
- 替换字符串中的特定字符(全局替换)
默认情况下,replace() 方法只替换第一个匹配项,我们可以加上全局搜索标志 g,匹配所有。
let str = "I love 快乐就是哈哈哈. 快乐就是哈哈哈 is great.";
let newStr = str.replace(/快乐就是哈哈哈/g, "JS");
console.log(newStr);
- 替换字符串中的空格
let str = "Hello 快乐就是哈哈哈!";
let newStr = str.replace(/\s+/g, " ");
console.log(newStr);
- 删除字符串中的特定字符
我们可以通过将替换值设置为空字符串 "" 来删除字符串中的特定字符或子字符串。
let str = "Hello, world!";
let newStr = str.replace(", world!", "");
console.log(newStr);
test() 方法
用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var patt = /e/;
let str = patt.test("Hello World!");
console.log(str)
exec() 方法
用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
var patt = /el/;
let str = patt.exec("Hello World!");
console.log(str)
match() 方法
- 如果正则表达式不包含
g标志(全局搜索),match()方法将返回一个数组,其中存放匹配的结果。如果没有找到任何匹配的结果,则返回null。 - 如果正则表达式包含
g标志,match()方法将返回一个包含所有匹配结果的数组
示例:
let str = "The quick brown fox jumps over the lazy dog.";
let regexp = /fox/;
let match = str.match(regexp);
if (match !== null) {
console.log("Found:", match[0]);
} else {
console.log("找不到啊");
}
const str = "kljshhh!@#test456";
const regex = /\w+/g;
const matches = str.match(regex);
console.log(matches);
如果您觉得这篇文章有帮助,请点个赞吧~
评论
请登录后发表评论
去登录