/((java)+script)\sis\smore\sfun\sthan\s\2/.test('javascript is more fun than java'); //true
/((java)+script)\sis\smore\sfun\sthan\s\2/.test('javascript is more fun than jav'); //false
/((?:java)+script)\sis\smore\s(fun)\sthan\s\2/.test('javascript is more fun than fun'); // true
/((?:java)+script)\sis\smore\s(fun)\sthan\s\2/.test('javascript is more fun than java'); // false
指定匹配位置
//^: 匹配行开头
/^java/.test('javascript is more fun than java'); //true
/^java/.test('ok. javascript is more fun than java'); //false
//$: 匹配行结尾
/java$/.test('javascript is more fun than java'); //true
/java$/.test('ok. javascript is more fun than a'); //false
/java$/.test('ok. javascript is more fun than a'); //false
// \b单词边界;
/\bhello\b/.test('hello world'); //true
/\bhello\b/.test('helloworld'); // false
// 注意: [\b]是匹配 js中的特殊字符, 退格符...
// \B与\b是相反的
// (?=p): 先行断言... 必须与p匹配; 如例子,这个位置一定要有`:`
/java(?=:)/.test('java:'); //true
/java(?=:)/.test('java'); //false
// (?!p) 于(?=p) 相反, 一定不能匹配
Table of Contents generated with DocToc
基础内容
在线测试网站: http://regexr.com/
基本概念:
^$.*+?=!:|\/()[]{}
; 当需要匹配这些符号自身的时候, 加上反斜杠\
就行了; 如果记不住想匹配自身但是又不知道哪些符号是特殊字符的时候,可以给所以字符都加\
;字符类
[]
包含的字符组成charater class, 匹配它所包含的任意字符 如[abc], a,b,c中的任意都匹配:常用字符类:
重复
基本符号是:
{}
重复概念中的:贪婪模式与非贪婪模式
使用方法:
??
,+?
,*?
,尽可能少的匹配举例:
选择,分组,引用
选择符
|
: 或者; 循序 自左向右组合符
()
的作用:引用:子模式 在同一表达式中,引用前面的子表达式 用'\'后面跟数字来实现, \1第一个,\3第三个,数字是左括号的顺序;例子中
\2
代表的就是第二个做括号里的自引用(java)
:子模式中需要注意的一点:
用(?:)去掉引用,下面的例子就是如何创造组合,但又不包含引用达式; 解读:
\2
不再是java
,而是fun
指定匹配位置
修饰符
i: 大小写 ignore case g: 全局 global m: 多行 multiline
string对象应用
search: 返回索引, 没有就返回-1; 无法进行全局搜索, 忽略g修饰符
replace:
replace可以使用 $应用表达式;
match:
正则包含g, 返回所有匹配的结果
不包含g, 第一个参数是完整的完整匹配串; 后面的是引用. 这个和Regex的exec是一样的;
split:
用正则, 指定分隔符;
分割符为:
,
, 而且无论旁边有多少个空格;RegExp
很大的用途就是, 可以动态的创建 正则表达式;
正则直接量中的 单斜杠'\', 一定要替换为双斜"\"
一个注意点
实例搜集
replace的经典应用
http://www.bennadel.com/blog/2198-special-references-in-javascript-s-string-replace-method.htm
$&: 当前匹配的内容 &`: 当前匹配内容的左侧 &': 右侧
千分价格分隔符
自左向右的字符匹配法。。。一定从第一个字符开始分析,类似于索引搜索。
理解舍弃原则
也就是消耗过的字符或是消耗过的字符的替换字符,不再参与匹配工作.
密码匹配的例子
密码:至少8字符,至少有一个数字,至少有一个小写和一个大写字母,至少包含一个比如@#%$^的字符,不包含空白