JavaScript 正则表达式——学习笔记(用于复习)

前言

本篇文章是一篇MDN正则表达式学习笔记,用于复习。

如果笔记总结有错,请各位大佬指出,避免误导更多人。


1. 创建一个正则表达式

(1)使用一个正则表达式字面量,其由包含在斜杠之间的模式组成,如下所示:

var re = /abc/;

脚本加载后,正则表达式字面量就会被编译。当正则表达式保持不变时,使用此方法可获得更好的性能

反斜杠之间不能识别变量,不会被识别。

var u='abc'
var re = /u/;  // 得到的还是u,而不是abc

这时可以使用模板字符串以及eval()函数

var u='abc'
// eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。
var re = eval(`/${u}/`)

(2)或者调用RegExp对象的构造函数,如下所示:

var re= new RegExp('abc')

在脚本运行过程中,用构造函数创建的正则表达式会被编译。如果正则表达式将会改变,或者它将会从用户输入等来源中动态地产生,就需要使用构造函数来创建正则表达式。

与字面量创建不同,构造函数可以识别变量

var u='abc'
var re= new RegExp(u)

2. RegExp 修饰符

i - 修饰符是用来执行不区分大小写的匹配。

var re1=/abc/i;
var re2=/abc/
var a='wtjsosjaBc'
console.log(re1.test(a)); //true
console.log(re2.test(a)); //false

g - 修饰符是用于执行全文的搜索(而不是在找到第一个就停止查找,而是找到所有的匹配)。

var str="Is this all there is?";
var re1=/is/g;
var re2=/is/;
console.log(str.match(re1)); //[ 'is', 'is' ]
console.log(str.match(re2)); //[ 'is', index: 5, input: 'Is this all there is?', groups: undefined ]

除此之外,还有
在这里插入图片描述

3. RegExp.lastIndex

lastIndex 是正则表达式的一个可读可写的整型属性用来指定下一次匹配的起始索引。只有正则表达式使用了表示全局检索的"g"标志时,该属性才会起作用。
在这里插入图片描述

4. RegExp原型上的方法

test()

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

var re = /abc/;
var a='wtjsosjabc'
var b='wtjsosjab'

console.log(re.test(a)); //true
console.log(re.test(b)); //false

exec()

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

如果匹配成功,exec() 方法返回一个数组(包含额外的属性 index 和 input ,参见下方表格),并更新正则表达式对象的 lastIndex 属性。完全匹配成功的文本将作为返回数组的第一项,从第二项起,后续每项都对应正则表达式内捕获括号里匹配成功的文本。

如果匹配失败,exec() 方法返回 null,并将 lastIndex 重置为 0 。

const regex1 = RegExp('foo*', 'g');
const str1 = 'table football, foosball';
let array1;

while ((array1 = regex1.exec(str1)) !== null) {
  console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`);
  // expected output: "Found foo. Next starts at 9."
  // expected output: "Found foo. Next starts at 19."
}

5. String原型上的方法

match()

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

如果使用g标志,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。
如果未使用g标志,则仅返回第一个完整匹配及其相关的捕获组(Array)。 在这种情况下,返回的项目将具有如下所述的其他属性。
在这里插入图片描述

var str="Is this all there is?";
var re1=/is/g;
var re2=/is/;
console.log(str.match(re1)); //[ 'is', 'is' ]
console.log(str.match(re2)); //[ 'is', index: 5, input: 'Is this all there is?', groups: undefined ]

matchAll()

matchAll() 方法返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器, RegExp必须是设置了全局模式g的形式,否则会抛出异常TypeError。

语法:

str.matchAll(regexp)

使用:

var str="Is this all there is?";
var re1=/is/g;
const arr =str.matchAll(re1)
for(const i of arr ){
    console.log(i);
}

运行结果
在这里插入图片描述

search()

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

var str="Is this all there is?";
var re1=/is/;
var re2=/ish/;
console.log(str.search(re1)); //5
console.log(str.search(re2)); //-1

6. 正则表达式中的特殊字符

字符含义
\转义符
^匹配输入的开始。/^A/ 并不会匹配 “an A” 中的 ‘A’,但是会匹配 “An E” 中的 ‘A’。'^' 作为第一个字符出现在一个字符集合模式时,它将会有不同的含义。
$匹配输入的结束。例如,/t$/ 并不会匹配 “eater” 中的 ‘t’,但是会匹配 “eat” 中的 ‘t’。
*匹配前一个表达式 0 次或多次。等价于 {0,}。
+匹配前面一个表达式 1 次或者多次。等价于 {1,}。
?匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。
.(小数点)默认匹配除换行符之外的任何单个字符。例如,/.n/ 将会匹配 “nay, an apple is on the tree” 中的 ‘an’ 和 ‘on’,但是不会匹配 ‘nay’。
字符含义
x(?=y)匹配’x’仅仅当’x’后面跟着’y’.这种叫做先行断言
(?<=y)x匹配’x’仅当’x’前面是’y’.这种叫做后行断言
x(?!y)仅仅当’x’后面不跟着’y’时匹配’x’,这被称为正向否定查找
(?<!y)x仅仅当’x’前面不是’y’时匹配’x’,这被称为反向否定查找
`xy`
字符含义
{n}n 是一个正整数,匹配了前面一个字符刚好出现了 n 次。 /a{2}/ 不会匹配“candy”中的’a’,但是会匹配“caandy”中所有的 a
{n,}n是一个正整数,匹配前一个字符至少出现了n次
{n,m}n 和 m 都是整数。匹配前面的字符至少n次,最多m次。如果 n 或者 m 的值是0, 这个值被忽略。
[xyz]一个字符集合。可以使用破折号(-)来指定一个字符范围。
[^xyz]一个反向字符集
字符含义
\d匹配一个数字。等价于[0-9]
\D匹配一个非数字字符。等价于[^0-9]
\w匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]。
\W匹配一个非单字字符。等价于 [^A-Za-z0-9_]。
\n匹配一个换行符 (U+000A)。
\r匹配一个回车符 (U+000D)。
\s匹配一个空白字符,包括空格、制表符、换页符和换行符。例如,/\s\w*/匹配"foo bar."中的’ bar’。
\S匹配一个非空白字符。例如,/\S\w*/ 匹配"foo bar."中的’foo’。
\0匹配 NULL(U+0000)字符, 不要在这后面跟其它小数
字符含义
\xhh匹配一个两位十六进制数(\x00-\xFF)表示的字符。
\uhhhh匹配一个四位十六进制数表示的 UTF-16 代码单元。
\u{hhhh}或\u{hhhhh}(仅当设置了u标志时)匹配一个十六进制数表示的 Unicode 字符。

如果读完觉得还不错,记得点赞、收藏!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JavaScript正则表达式和Java正则表达式在语法上有一些差异,但是它们的基本概念和用法是相似的。下面是将JavaScript正则表达式转换为Java正则表达式的一些常见规则: 1. 语法差异: - JavaScript正则表达式使用斜杠(/)作为定界符,而Java正则表达式使用双引号(")作为定界符。 - JavaScript正则表达式中的特殊字符需要进行转义,而Java正则表达式中的特殊字符不需要转义。 2. 字符类: - JavaScript正则表达式中的字符类使用方括号([])表示,而Java正则表达式中使用方括号([])或者Unicode转义(\p{...})表示。 - JavaScript正则表达式中的字符类可以使用连字符(-)表示范围,而Java正则表达式中需要使用Unicode转义(\uXXXX)表示范围。 3. 量词: - JavaScript正则表达式中的量词使用花括号({})表示,而Java正则表达式中使用花括号({})或者问号(?)表示。 - JavaScript正则表达式中的贪婪量词默认是贪婪模式,而Java正则表达式中的贪婪量词需要在后面添加问号(?)来表示非贪婪模式。 4. 边界匹配: - JavaScript正则表达式中的边界匹配使用插入符号(^)和美元符号($)表示,而Java正则表达式中使用\A和\Z表示。 5. 其他差异: - JavaScript正则表达式中的捕获组使用圆括号(())表示,而Java正则表达式中使用圆括号(())或者方括号([])表示。 - JavaScript正则表达式中的反向引用使用反斜杠加数字(\1、\2等)表示,而Java正则表达式中使用美元符号加数字($1、$2等)表示。 以上是一些常见的JavaScript正则表达式转换为Java正则表达式的规则。具体转换时,还需要根据具体的正则表达式进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焦妮敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值