首页 > 其他分享 >正则表达式

正则表达式

时间:2023-11-07 18:45:10浏览次数:33  
标签:字符 匹配 正则表达式 字符串 test true

概念:

正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。

创建正则表达式

两种方法:字面量方式,构造函数方式

//字面量方式,其由包含在斜杠之间的模式组成
var re = /ab+c/
//构造函数方式,调用RegExp对象的构造函数
var re = new RegExp("ab+c")

字符分类

正则表达式子面试是斜杠/之间的部分,由字符组成,不过里面的字符有的是字面上的意思,有的却有特殊作用。

/regular expression /igm

img 为修饰符,用于附加一些规则。ES6中还增加了uys修饰符。
我们把表示字面意思的字符称为字面量字符,有特殊作用的字符称为元字符。
主要的元字符有:. ^ $ | \ ? * + ( ) [ ] { }

点字符(.

点字符(.)表示任意字符,糊了回车(\r),换行(\n),行分隔符(\u2028),段分隔符(\u2029),以及码点大于0xFFFF的字符。
注:ES6推出的u修饰符,能匹配上码点大于0xFFFF的字符

var reg=/\d/
var str="11123bcd"
var res=str.replace(reg,"a") //将数字换为a
console.log(res)//a1123bcd 只要匹配到符合规则的就返回

位置字符(^ $

位置字符^表示字符串的开始位置,而$表示字符串的结束位置

// 字符串中有以 abc 开头的部分
/^abc/.test('abcdef') // true

// 字符串中有以 def 结尾的部分
/def$/.test('abcdef') // true

// 字符串从开头到结尾只有 abc 
/^abc$/.test('abc'); // true

选择符(|

选择符( | )在正则表达式中表示"或",比如 /cat|dog/表示匹配 catdog

// 字符串中有 cat 或 dog
/cat|dog/.test('cat') // true
/cat|dog/.test('dog') // true

转义字符(\)

如果要在正则表达式中表示元字符,就得进行转义,即跟在\后面。
注意,如果正则表达式是以构造函数生成的,由于第一个参数是字符串,所以本身会转义,得用两个转义符号\\才行

var r = new RegExp('a\\.c');// /a\.c/

集合类([])、脱字符(^)、连字符(-

集合类([])用于表示一系列字符可用来匹配,相当于一个字符集合,将字符都放到[]之间。

//字符串中有a,b,c其中一个字符
/[abc]/.test('a');//true
/[abc]/.test('b');//true
/[abc]/.test('c');//true

集合类中,^不是位置字符,而是脱节字符,表示集合类之中的字符都不能用来匹配
集合类中,-也算特殊字符,称为连字符,表示连续的字符集合

//字符串中有a到z小写字母其中一个字符
/[a-z]/.test('b') //true

//字符串中有数字、小写字母、大写字母其中一个字符
/[0-9a-zA-Z]/.test(1) //true

注意: 连字符 -支队单个字符生效,所以[1-31]代表从13的字符,而不是从131。另外也可以对unicode字符生效

//字符串理由1、2、3其中之一
/[1-31]/.test(4) //flase
//字符串中有从\u0128 到\uFFFF 其中一个
/[\u018-\uFFFF]/.test('\0130\u0131\u01332')//true

重复类({})、量词符(? * +)、贪婪模式

重复类({})用于表示也给字符的重复次数(即出现次数)

  • {n}:字符重复n次。
  • {n,}:字符重复至少n
  • {n,m}:字符重复nm
//字符o重复两次
/lo{2}/.test('look') //true
/lo{2}/.test('lok') //flase

正则表达式中还可以用量词符来表示字符的出现的次数

  • ? :字符出现0次或1次,相当于{0,1}
  • *:字符出现至少0次,相当于{0,}
  • +:字符出现至少1次,相当于{1,}
//字符t出现0次 或 1次
/t?est/.test('test')//true
/t?est/.test('est')//true

通常情况下,指定了字符的出现次数后,都是按最多的情况去匹配,这一规则称为贪婪模式.

//贪婪模式下:字符a出现1到4次,则按最多的情况返回
/a{1,4}/.exec('aaaabc')[0]//"aaaa"

为了匹配更少的,可以采用非贪婪模式,通过在后面跟上?就可以

//非贪婪模式:字符a出现1到4次,则按最少的情况返回
/a{1,4}?/.exec('aaaabc')[0]//"a"

不可打印字符

正则表达式对一些不可带引的特殊字符,提供了表达方式:

  • \cx:表示Ctrl- [X],其中XA-Z之中任一个英文字母,用来匹配空值字符
  • [\b]:匹配退格键(U+0008),不要与\b混淆
  • \r:匹配回车键
  • \n:匹配换行键
  • \t:匹配制表符tab(U+0009)
  • \v:匹配垂直制表符(U+0008)
  • \f:匹配换页符(U+000C')
  • \0:匹配null字符(U+0000)
  • \xhh:匹配一个以两位十六进制书(\x00-\xFF)表示的字符
  • \xhhh:匹配一个以四位十六进制数(\u0000-uFFFF)表示的Unicode字符

预定义字符

预定义字符是对正则表达式中一些常用字符匹配的简写

  • \d:匹配09的任意数字,相当于[0-9]
  • \D:匹配09以为的字符,相当于[^0-9]
  • \w:匹配任意的字母,数字和下划线,相当于[a-zA-Z0-9_]
  • \W:匹配字母,数字和下划线以外的字符,相当于[^a-zA-Z9-9_]
  • \s:匹配空格(包括换行符,制表符,空格符等),相当于[\r\n\t\v\f]
  • \S:匹配非空格的字符,相当于[^\r\n\t\v\f]
  • \b:匹配词边界,表示词独立
  • \B:匹配非词边界,表示词不独立
// 单词 world 独立
/\bworld/.test('hello world') // true
/\bworld/.test('world hello') // true
/\bworld/.test('hello-world') // true
/\bworld/.test('world-hello') // true
/world\b/.test('world hello') // true
/world\b/.test('hello world') // true
/world\b/.test('hello-world') // true
/world\b/.test('world-hello') // true

// 单词 world 不独立
/\Bworld/.test('hello world') // false
/\Bworld/.test('helloworld') // true
/world\B/.test('hello world') // false
/world\B/.test('helloworld') // true


修饰符(i g m u y s)

修饰符放在正则表达式斜杠/后面,用于附加一些规则

  • i:忽略大小写(ignore)
  • g:全局匹配(global),只要剩余位置上有匹配就行,使用字符串的match方法时返回每次匹配的内容形成的数组,而不会返回分组的内容
  • m:允许多行(multiline),只影响位置符号^$
  • u:Unicode模式,用来正确匹配码点大于\uFFFF的字符
  • y:粘结(sticky),确保多值匹配时,从剩余的第一个位置能匹配上
  • s:单行(singleline),又称dotAll模式,点字符(.)代表了所有字符,包括换行符\n
// i 忽略大小写
/abc/.test('ABC') // false
/abc/i.test('ABC') // true

// g 全局匹配
'abbcbb'.match(/bb/) // ["bb", index: 1, input: "abbcbb", groups: undefined]
'abbcbb'.match(/bb/g) // ["bb","bb"]

// m 允许多行
/world$/.test('hello world\n') // false
/world$/m.test('hello world\n') // true

// u Unicode 模式
'

标签:字符,匹配,正则表达式,字符串,test,true
From: https://www.cnblogs.com/rhy2103/p/17815004.html

相关文章

  • 正则表达式-r'\[.*\]'和r'[.*]'的区别
    则表达式r'[.*]'实际上会匹配包含任何一个字符*或.或*的字符串。这不是想要的结果。希望匹配方括号[]中的任意字符,并且要匹配多个字符。要匹配方括号[]中的任意字符,并匹配多个字符,你应该使用r'\[.*\]',其中\[匹配左方括号,.*匹配任意字符(包括数字、字母等等),然后\]......
  • 正则可视化在线工具-更直观地理解和调试正则表达式的利器
    在工作和学习中,正则表达式是一种强大的工具,用于处理和分析文本数据。它可以帮助我们在海量数据中快速搜索、匹配和提取所需的信息。然而,正则表达式的语法复杂,很多人在编写和调试时可能会遇到困难。为了解决这个问题,我决定自己编写一个正则工具。这个工具旨在提供一个直观且用户友......
  • 正则表达式
    密码格式^(?![A-Za-z]+$)(?![A-Z\d]+$)(?![A-Z\W]+$)(?![a-z\d]+$)(?![a-z\W]+$)(?![\d\W]+$)\S{8,20}$//密码格式,需包含大写字母、小写字母、数字、特殊字符@#$%^&*()_+|~-=\\`{}[]:\";'<>?,./)@Pattern(regexp="^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)......
  • Understanding RegEx with Notepad++ 正则表达式
    Searchingastringusingthe‘Find‘or‘Find&Replace‘functionintexteditorshighlightstherelevantmatch(e.g.searching‘le‘highlightsitinsidewordssuchas‘apple‘,‘please’etc).However,someadvancededitorssuchasNotepad++(Imention......
  • uni app 的ui插件uview里自带的一些正则表达式
    uniapp的ui插件uview里自带的一些正则表达式取自"uni_modules\uview-ui\libs\function\test.js"  /***验证电子邮箱格式*/functionemail(value){return/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value)}/***......
  • 正则表达式_global造成的二次的匹配结果不一致的问题
    letnum=77795constreg=/^[0-9]\d*$/gconsole.log(reg.test(num))//trueconsole.log(reg.test(num))//false正则的lastIndex从字面上来讲就是最后一个索引,实际上它的意思是正则表达式开始下一次查找的索引位置,第一次的时候总是为0的,第一次查找完了的时候会把l......
  • mysql正则表达式替换
    MySQL正则表达式替换在MySQL中,正则表达式替换是一种强大的功能,它可以帮助我们快速、灵活地对字符串进行处理和修改。本文将介绍MySQL中如何使用正则表达式替换,并提供一些实际的代码示例。什么是正则表达式?正则表达式(RegularExpression)是一种用于描述模式匹配的字符串。它由正则表......
  • 使用Python和正则表达式格式化字符串中的所有数字
    在处理文本数据时,我们经常需要提取或格式化特定的信息。在这些情况下,Python的正则表达式库(re模块)可以非常有用。让我们看一个具体的例子,如何使用Python和正则表达式来格式化字符串中的所有数字。首先,我们需要导入Python的正则表达式库。在Python中,正则表达式的操作主要通过"re"模块......
  • 正则表达式:IP地址和子网掩码
    #IP地址echoX.X.X.X|grep-E'^(22[0-3]|2[0-1][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}$'#子网掩码echoX.X.X.X|grep-E'^((255.255.255.(0|128|192|224|240|248|252|254|255))|(255.255.(0|128......
  • MySQL正则表达式
    1. 正则表达式运算符expressionNOTREGEXPpattern,expressionNOTRLIKEpatternexpressionREGEXPpattern,expressionRLIKEpattern如果表达式expression匹配给定模式pattern返回1,否则返回0.如果表达式expression或者模式pattern为NULL,则返回NULLRLIKE和REGEXP一样.2......