正则表达式

推荐一个网站,检测你的正则 网站连接javascript

建立正则表达式的方法

  1. 直接建立
var pattern = /s$/
复制代码
  1. 使用RegExp()构造函数建立
var pattren = new RegExp('s$')
复制代码

正则特殊字符匹配含义

字符 匹配
[..] 包含括号内的任意字符
[^..] 不在括号里的任意字符
\w 合法字符,包含数字字母以及_等,我看权威指南写的其等价于[a-zA-Z0-9],但其实并非,\w对_也合理
\W 等价非法字符
\s 空白符
\S 非空白符号
\d 等价[0-9]
\D 等价[^0-9]

贪婪重复字符语法

注意:如下这个列表匹配的重复字符是尽量多的匹配java

字符 匹配
{n,m} 最少n个,不能超过m个
{n,} 大于等于n次
{n} n次
? 0个或者1个,说明该项是可有可没有
+ 出现次数大于等于1次
* 出现次数0次或者屡次

示例正则表达式

let a = 'hhhh'
a.match(/[h]+/)
//得出结果:hhhh
复制代码

非贪婪重复字符语法

这个就至关于在贪婪重复字符的后三个后面加了个?号数组

字符 匹配
?? 0个或者1个,尽量少的匹配
+? 1个或者多个,尽量少的匹配
*? 0个或者多个,尽量少的匹配

示例函数

let a = 'hahahaha'
a.match(/[h]+?/)
//得出结果:["h","h","h","h"] 
复制代码

选择、分组、引用

字符 匹配
|
(...) 将括号内的字符看做一个单元,这个单元可经过*,+,?,
(?:...) 只组合,但不记忆与该组相匹配的字符
\n 和第n个分组匹配的字符

锚字符

字符 匹配
^ 匹配字符串的开头
$ 匹配字符串结尾
\b 匹配单词边界
\B 匹配非单词的边界
(?=p) 匹配的字符要与p匹配,但不能包括匹配p的那些字符
(?!p) 匹配的字符要不与p匹配

修饰符

字符 匹配
g 全局
i 不分大小写
m 多行匹配

String执行正则表达式模式匹配和检索替换操做的方法

search()

其参数是正则表达式,若是不是正则表达式,首先经过new RegExp()转换为正则表达式,其返回的是第一个与之匹配的子串的起始位置,若是找不到返回的-1网站

"Javacript".search(/script/) //4
复制代码

replace()

第一个参数是正则表达式用以匹配字符串,第二个参数是进行替换的字符串。默认只替换第一个匹配的子字符串,若是想全局替换,第一个参数加上/g修饰符ui

'javascriptscript'.replace(/script/, 'haha')//"javahahascript"
'javascriptscript'.replace(/script/g, 'haha')//"javahahahaha"
复制代码

有一个特殊的地方,若是在替换的字符中出现$加数字,那么replace()将用与指定的子表达式相匹配的文原本替换这个字符串this

let string2 = "'' '哈哈' 'this is' 'nono'"
let reg = /'([^']*)'/g
string2.replace(reg, "“$1”")//"“” “哈哈” “this is” “nono”"
var str = 'X98Y87Z65';
 var reg = /^X(\d+)Y(\d+)Z(\d+)$/;  // 三个数字部分加了小括号,表示子表达式
 reg.test(str);  // 此处使用exec()等其余正则表达式的匹配方法也能够
 console.log(RegExp.$1);  // 98
 console.log(RegExp.$2);  // 87
 console.log(RegExp.$3);  // 65
复制代码

这里$1我以为很重要url

match()

参数是一个正则表达式,返回的是一个由匹配结果组成的数组,若是加了修饰符/g,则该数组的内容是全部知足条件的子字符串,若是没有加修饰符,只会检索第一个匹配的字符串,且返回的也是一个数组。若是没有找到匹配结果返回nullspa

let string3 = "1 and 2 and 3"
string3.match(/\d/g)//["1", "2", "3"]
string3.match(/\d/)//["1", index: 0, input: "1 and 2 and 3", groups: undefined]
复制代码

split()

将字符串拆分为一个子串组成的数组

正则表达式执行模式匹配的方法

exec()

和String的match()方法很像,只是其参数是一个字符串,exec的正则表达式无论具不具备全局修饰符/g,它老是返回一个匹配结果。可是加上了/g后,其会将当前正则表达式对象的lastIndex属性设置为紧挨着匹配子串的字符位置,能够看下图

let string1 = "Hello Hello Hello"
let reg2 = /Hello/
reg2.exec(string1)//["Hello", index: 0, input: "Hello Hello Hello", groups: undefined]
let reg = /Hello/g;
reg.exec(string1)//["Hello", index: 0, input: "Hello Hello Hello", groups: undefined]
复制代码

test()

其参数也是字符串,其匹配后的结果为true或false

平常正则表达式

  1. 获取背景图片的url
let url = "url(http://www.baidu.com/01.png)"
let reg = /url\(([^\)]+)\)$/
console.log(url.replace(reg, '$1'))
复制代码
  1. url验证
let reg3 = /[a-z]+:\/\/[a-z]+/
console.log(reg3.test('http://aa.com'))
复制代码
  1. email验证
let reg2 = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z]+/
复制代码
  1. 去掉先后空格
let reg4 = /^\s+|\s+$/g
console.log(' hahaha '.replace(reg4, ''))
复制代码
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息