JS正则表达式

1 正则语法

1.1 常用元字符

代码 描述
. 匹配除换行符之外的任意字符
[...] 匹配方括号中的任意单个字符
[^...] 匹配不在方括号中的任意单个字符
\w 匹配数字、字母和下划线,[a-zA-Z0-9_]
\W 匹配任意单个非字母、数字或下划线的字符
\s 匹配任意单个空白字符(空格、制表符、换行符、回车符等)
\S 匹配任意单个非空白字符
\d 匹配任意单个数字
\D 匹配任意单个非数字字符
\b 匹配任意单个单词边界
\B 匹配任意单个非单词边界的位置
^ 匹配字符串的开始
$ 匹配字符串的结束

1.2 常用限定符

代码 描述
* 匹配前面的字符 0 次或多次
+ 匹配前面的字符 1 次或多次
? 匹配前面的字符 0 次或 1 次
{n} 匹配前面的字符恰好 n 次
{n, } 匹配前面的字符至少 n 次
{n, m} 匹配前面的字符至少 n 次,至多 m 次
x|y 左右两边的模式只要有一个匹配就可以
() 将模式分组,并记住匹配的文本
\1 匹配第 1 个分组所记住的文本
\2 匹配第 2 个分组所记住的文本
\n 匹配第 n 个分组所记住的文本

1.3 常用分组语法

代码 描述
(exp) 匹配exp,每个分组将产生分组号。可用\x的形式使用分组号,其中x表示数字。例如:/<(\w+)><\/\1>/可以匹配成对出现的HTML标签;
(?:exp) 匹配exp,但不产生分组号
(?=exp) 负向零宽断言, 表示在它后面必须匹配 exp
(?<=exp) 负向零宽断言, 表示在它前面必须匹配 exp
(?!exp) 负向零宽断言,表示在它后面不能匹配 exp
(?   负向零宽断言, 表示在它前面不能匹配 exp

举例说明:

  • (?=exp)
    我们可以使用正则表达式 /^\d+(?=%)/ 来匹配所有以百分号结尾的数字,例如:
123%:匹配到 12345%:匹配到 45

下列字符串都不能被匹配:

123:不以百分号结尾。
45%6:百分号后面还有其他字符。
  • (?<=exp)

我们可以使用正则表达式 /(?<=).*(?=<\/em>)/ 来匹配所有被 包含的字符串,例如:

<em>hello</em>:匹配到 hello。
<em>world</em>:匹配到 world。

下列字符串都不能被匹配:

<em>hello</em>world:</em> 后面还有其他字符。
hello<em></em><em> 前面没有其他字符
  • (?!exp)

我们可以使用正则表达式 /^(?!abc)/ 来匹配所有不以 abc 开头的字符串,例如:

def:不以 abc 开头。
123:不以 abc 开头。

下列字符串都不能被匹配:

abcdef:以 abc 开头。
abc123:以 abc 开头。
  • (?
    我们可以使用正则表达式 /(? 来匹配所有不以 abc 结尾的字符串,例如:
def:不以 abc 结尾。
123:不以 abc 结尾。

下列字符串都不能被匹配:

defabc:以 abc 结尾。
123abc:以 abc 结尾。

2 JS中正则相关的几个方法

RegExp.prototype.test()

test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。

/\d+/.test('hello'); // false

RegExp.prototype.exec()

exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。

String.prototype.search()

search() 方法执行正则表达式和 String 对象之间的一个搜索匹配。如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1。

String.prototype.match()

match()方法检索返回一个字符串匹配正则表达式的结果。

  • 如果使用 g 标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
  • 如果未使用 g 标志,则仅返回第一个完整匹配及其相关的捕获组。

String.prototype.replace()

replace() 方法返回一个由替换值替换部分或所有的模式(pattern)匹配项后的新字符串。
模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。
如果pattern是字符串,则仅替换第一个匹配项。

String.prototype.split()

你可能感兴趣的:(大前端,正则表达式,javascript,开发语言)