推荐一个网站,检测你的正则 网站连接javascript
var pattern = /s$/
复制代码
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 | 多行匹配 |
其参数是正则表达式,若是不是正则表达式,首先经过new RegExp()转换为正则表达式,其返回的是第一个与之匹配的子串的起始位置,若是找不到返回的-1网站
"Javacript".search(/script/) //4
复制代码
第一个参数是正则表达式用以匹配字符串,第二个参数是进行替换的字符串。默认只替换第一个匹配的子字符串,若是想全局替换,第一个参数加上/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
参数是一个正则表达式,返回的是一个由匹配结果组成的数组,若是加了修饰符/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]
复制代码
将字符串拆分为一个子串组成的数组
和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]
复制代码
其参数也是字符串,其匹配后的结果为true或false
let url = "url(http://www.baidu.com/01.png)"
let reg = /url\(([^\)]+)\)$/
console.log(url.replace(reg, '$1'))
复制代码
let reg3 = /[a-z]+:\/\/[a-z]+/
console.log(reg3.test('http://aa.com'))
复制代码
let reg2 = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z]+/
复制代码
let reg4 = /^\s+|\s+$/g
console.log(' hahaha '.replace(reg4, ''))
复制代码