位置:海鸟网 > IT > JavaScript >

Javascript正则表达式详细解释

g 代表全局匹配
m 代表可以进行多行匹配
i 代表不区分大小写匹配
^ 匹配输入字符串的开始位置
$ 匹配输入字符串的结束位置
* 匹配前面的子表达式零次或多次. 等价于{0,}
+ 匹配前面的子表达式一次或多次. 等价于{1,}
? 匹配前面的子表达式零次或一次. 等价于[0,1} , 当该字符跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

\d 匹配一个数字字符. 等价于 [0-9]
\D 匹配一个非数字符. 等价于 [^0-9]
\w  ,等价于 "[A-Za-z0-9_]"
\W 匹配任何非单词字符,等价于 "[^A-Za-z0-9]"
\s 匹配任何空白字符, 包括空格 制表符 换页符 等等. 等价于[\f\n\r\t\v]
\S 匹配任何非空白字符. 等价于 [^\f\r\n\t\v]
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。

(pattern)匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。

(?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

(?=pattern)正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)负向预查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

匹配2-4个汉字

 程序代码
/^[\u4e00-\u9fa5]{2,4}$/g;


匹配6到18个(字母,数字,下划线)字符

 程序代码
/^\w{6,18}$/;


 程序代码
/^[A-Za-z0-9_]$/;


匹配HTML标签

 程序代码
/<[^>]*>|<\/[^>]*>/gm;


 程序代码
/<\/?[^>]+>/gm;


匹配左右两端的空格

 程序代码
/(^\s*)|(\s*$)/g;


优先级顺序(从高到低)
\ 转义符
(),(?:),(?=),[] 圆括号和方括号
* , + , ? , {n} , {n,} , {n,m} 限定符
^ , [vapour:content]nbsp; 位置和顺序
| "或"操作

匹配两个连续的以空格分开的相同单词

 程序代码
/\b([a-z]+) \1\b/gim ;

在这个示例中,子表达式就是圆括号之间的每一项。
所捕获的表达式包括一个或多个字母字符,即由'[a-z]+' 所指定的。
该正则表达式的第二部分是对前面所捕获的子匹配的引用,也就是由附加表达式所匹配的第二次出现的单词。
'\1'用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。
如果不这样,则诸如 "is issued" 或 "this is" 这样的短语都会被该表达式不正确地识别。


 程序代码
var ss = "Is is the cost of of gasoline going up up?. Is is the cost of of gasoline going up up?.";
var re = /\b([a-z]+) \1\b/gim;   
var rv = ss.replace(re,"$1");
document.write(rv) //输出 "Is the cost of gasoline going up?. Is the cost of gasoline going up?. "


 程序代码
/\bCha/

匹配单词 'Chapter' 的前三个字符,因为它们出现在单词边界后


 程序代码
/ter\b/

匹配单词 'Chapter' 中的 'ter',因为它出现在单词边界之前


 程序代码
/\Bapt/

匹配 'apt',因为它位于 'Chapter' 中间,但不会匹配 'aptitude' 中的'apt',因为它位于单词边界后
*/


匹配URL地址

 程序代码
/(\w+):\/\/([^\/:]+)(:\d*)?([^#]*)/

将下述的URI 分解为协议 (ftp, http, etc),域名地址以及页面/路径:
:80/scripting/default.htm

第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 'http://www.cuoxin.com/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。

将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容:

RegExp.$1 包含 "http"

RegExp.$2 包含 "msdn.microsoft.com"

RegExp.$3 包含 ":80"

RegExp.$4 包含 "/scripting/default.htm"