正则表达式入门-程序员必备


学习一门语言我们需要熟悉他的语法词汇还有常用表达,同样这种学习方法适用于学习任何一门技术,正则的入门很简单例如我们想让用户输入的数据只能是数字那么我们可以用"^[0-9]*$"来实现对输入数据的监控当然具体功能还涉及更多的知识层面,本文仅介绍正则表达式的入门哦????

什么是正则表达式?

我们来百度一下

 

正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,那具体的元字符有哪些呢?

嘿嘿我大概总结了一些↓

元字符

\cx 匹配由x指明的控制字符。

\b 查找单词边界。

\B 查找非单词边界。

\d 查找数字。

\D 查找非数字字符。

\f  查找换页符。

\n 查找换行符。

\r 查找回车符。

\s 匹配任何空白字符,包括空格 制表符 换页符等价于[\f\n\r\t\v]注意Unicode正则表达式会匹配到全角空格符。

\S 查找非空白字符。

\t 查找制表符。

\v 垂直制表符。

\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。。

\W 查找非字母、数字、下划线。等价于'[^A-Za-z0-9_]'。。

\0 查找NULL字符。

\xxx 查找八进制xxx规定的字符。

\xdd 查找十六进制dd规定的字符。

\uxxxx 查找以十六进制xxxx规定的Unicode字符。

 

^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合

$ 匹配输入字符串的结尾位置,如果设置了RegExp对象的multilime属性则$也匹配'\n'或'\r'

() 标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用

* 匹配前面的子表达式零次或多次

+ 匹配前面的子表达式至少一次

. 匹配除换行和行结束符以外的字符

[ 标记一个中括号表达式的开始

? 匹配前面的子表达式零次或者一次,或者指定一个非贪婪限制符

\ 将下一个字符标记为特殊字符(转义字符)

{ 标记限定符表达式的开始

| 指明两项之间的一个选择匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

X{n} 匹配包含n个X的字符串

X{n,}  匹配包含至少n个X的字符串

X{n,m}  匹配包含n到m个X的字符串

?=n 匹配任何其后紧接指定字符串 n 的字符串

?!n 匹配任何其后没有紧接指定字符串 n 的字符串

[abc]   查找方括号之间的任何字符

[^abc] 查找 除方括号内的字符以外的字符

[0-9] 查找任何从0-9的数字

[a-z] 查找任何从a到z的字符

[A-Z] 查找任何从A到Z的字符

[A-z] 查找任何从大写A到小写z的字符

[adgk] 查找给定集合内的任何字符

[^adgk] 查找给定集合外的任何字符

(red|blue|green) 查找任何制定的选项

那么知道了元字符用什么用呢?元字符使正则表达式具有处理能力 所以记住元字符才能列表达式就像数学中我们得知道加减乘除才能计算一样!

举个栗子 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$这里的0代表的是第一种月份表示方法。?表示可以出现也可以不出现。"|"表示都可以匹配(因为[]只能表示十个数然鹅一年12个月份)

 

运算符优先级

算术运算有优先级那正则表达式有吗?当然有,而且他们很相像

\ 转义字符
(), (?:), (?=), [] 圆括号,方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \任何元字符、任何字符 开始结束
| 替换或操作

相同优先级的从左到右进行运算,不同优先级的运算先高后低(表格优先级由高到低↓)

RegExp对象属性

global RegExp对象是否具有标志g

ignoreCase RegExp对象是否具有标志i

lastIndex 一个整数,标示开始下一次匹配的字符

multiline RegExp对象是否具有标志m

source 正则表达式源文本

RegExp对象方法

compile 编译正则表达式

exec 检索字符串中制定的值。返回找到的值,并确定其位置。

test 检索字符串中指定的值。返回true or false

string对象的方法

search 检索与正则表达式相匹配的值

match 找到一个或者多个正则表达式的匹配

replace 替换与正则表达式匹配的字串

split  把字符串分割为字符串数组

常用的正则表达

邮箱  ([\w]+[-]?)+(\.[\w]+)*@[\w]+(\.[\w]{2,3})+或[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+([\.][a-z]{2,3})+

手机号码  ^(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9]|168|199|(147)\d{8}$

身份证号(18位) ^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$

匹配QQ号 [1-9][0-9]{4,}(QQ号五位起步)

匹配年月日  ([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))

匹配网址url [a-zA-z]+://[^\s]*(结合邮箱也可以匹配整段网址)

日期格式^\d{4}-\d{1,2}-\d{1,2}(2019-03-13)

本文主要介绍的是在JavaScript下的正则,不同的平台用到的正则写法上有差异,请悉知

 

 

 

 

 

 


作者:锖侘,发布于:2019/03/15
原文:https://www.cnblogs.com/xn2sin18/p/10524958.html