JavaScript正则表达式(JavaScript:The Definitive Guide笔记)

//1.0 字符类
[...] 方括号内的任意字符
[^...] 不再方括号里面的任意字符
. 除换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9_]
\W 任何不适ASCII码字符组成的单词,等价于[^a-zA-Z0-9_]
\s 任何Unicode空白符
\S 任何非Unicode空白符
\d 任何ASCII数字,等价于[0-9]
\D 任何非Unicode数字,等价于[^0-9]
[\b] 退格直接量(特例)

方括号里面也可以有特殊的转义字符,例如[/\d\s/]匹配任意空白符或者数字

//1.1 重复
{n,m} 匹配前一项至少n次,但不能超过m次
{n,} 匹配前一项至少n次或者更多次
{n} 匹配前一项至少n次
? 匹配0次或者1次,等价于{0,1}
+ 匹配1次或者多次,等价于{1,}
* 匹配0次或者多次,等价于{0,}

//some examples:
/\d{2,5}/ //匹配2~5个数字
/\w{3}\d*/ //匹配单个单词和0个或多个数字
/\s+java\s+/ //匹配前后有一个或多个空格的java

//1.2 选择、分组和引用
字符"|"用于分隔供选择的字符,/android|iphone|ipod/可以匹配android,也可以匹配iphone或者ipod,匹配次序是从左至右的,
当左边的匹配后就会忽略右边的,所以说/a|abc/匹配"abc"时只能匹配a
正则表达式中,圆括号(())的作用有多种:
a:把单独的项组合成子表达式,例如:
/java(script)?/既可以匹配"java"也可以匹配"javascript"
/(aa|bb)+cc/可以匹配一个或多个"aa"或者"bb"与"cc"组成的字符串
b:在完整的模式中定义子模式
假定我们正在检索的模式是一个或多个小写字母后面跟了一个或多个数字,我们的正则可以这样写:/[a-z]+\d+/。
但是如果我们真正关心的是每个匹配尾部的数字,则可以将模式的数字部分放在"()"中,如:/[a-z]+(\d+)/
c:允许在同一正则表达式中引用前面的子表达式
通过在字符“\”后面家以为或多为数字来实现。这个数字指定了子表达式在正则表达式中的位置,他的位置是参与计数
的左括号的位置,例如,下面的正则表达式中,嵌套的子表达式([Ss]cript?)可以用\2来代替:
/([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/

对正则表达式前一个子表达式的引用,并不是指对子表达式模式的引用,而是与那个模式匹配的文本的引用。例如,下面
的正则用于匹配单引号或双引号之内的0个或多个字符,但它并不要求左右测的引号匹配:
/['"][^'"]*['"]/

如果要匹配左侧和右侧的引号匹配,则可以这样:
/(['"])[^'"]*\1/

如果不想创建分组的数字编码引用,则可以使用(?:)来分组:
/([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/
这里"\2"引用了与(fun\w*)匹配的文本。

//1.3 制定位置匹配

边界:如果我们想匹配"javascript"这个单词,可以这样写/^javascript$/,但是我们想匹配一个字符串中的"javascript"这个单词的时候,就要用到
\b,它可以匹配一个单词的边界,即位于\w(ASCII单词)和\W(非ASCII单词)之间的边界:
/\bjavascript\b/ 可以匹配"i love javascript,and you ?",而不会匹配"i lovejavascript..."

断言:

零宽正想断言:
如果在符号"(?="和")"之间加入一个表达式,那么它就是一个断言,用来说明括号内的表达式必须正确的匹配。例如:
可以用/[Jj]ava([Ss]cript)?(?=\:)/来匹配"javascript: the definitive guide"中的javascript,而不能匹配"java in a nutshell"中的java。

零宽负向断言:
(?!p)表示将不匹配p,例如:
/Java(?!Script)([A-Z]\w*)/ 可以匹配Java,但不能匹配JavaScript

//1.4 修饰符
i:执行不区分大小写的匹配
g:执行一个全局的匹配,即找到所有的匹配为止,而不是找到第一个就停止
m:多行匹配模式,^匹配一行的开头和字符串的开头,$匹配一行的结尾和字符串的结尾 :/java$/im 将匹配"Java"和"java\nis fun"

//1.5 String方法

search(): "javascript".search(/script/i); //4; 
serach方法不支持全局检索

replace(): "java: hi,javascript".replace(/java/gi,"ruby"); //ruby: hi,rubyscirpt
正则中使用圆括号括起来的表达式是有从左到右的索引的,而且正则会记忆与每个子表达式匹配的文本。如果在替换的字符串中出现了$加数字,那么replace方法会用与指定的子表达式匹配的文本来替换这两个内容:
比如,可以用它将字符串总的英文引号替换为中文半角引号:
"hello,\"javascript\"...".replace(/"([^"]*)"/g,'“$1”'); //hello,“javascript”...

match(): 此方法返回的是由匹配结果组成的数组:
"1 plus 2 equals 3".match(/\d/g); //["1","2","3"]
"1 plus 2 equals 3".match(/\d/); //["1"]

如果match方法没有进行全局检索,match返回的数组的第一个元素是匹配的字符串,剩余的元素则是子表达式匹配的结果,这个功能很有用,例如,
采用下面的代码来解析URL:
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "my oschina blog: http://my.oschina.net/johny/blog";
var result = text.match(url);
result.forEach(function(str) {
	console.log(str);
});
/*
http://my.oschina.net/johny/blog
http
my.oschina.net
johny/blog
*/
split(): "1,2,3,4".split(","); //["1","2","3"]

转载于:https://my.oschina.net/johny/blog/77613

中文名: JavaScript权威指南 (第6版) 原名: JavaScript: The Definitive Guide: Activate Your Web Pages, 6th edition 作者: David Flanagan 版本: 英文文字版-pdf/EPUB + 完整书中源代码 出版社: O'Reilly 书号: 978-0596805524 发行时间: 2011年05月10日 语言: 英文 内容简介: Since 1996, JavaScript: The Definitive Guide has been the bible for JavaScript programmers—a programmer's guide and comprehensive reference to the core language and to the client-side JavaScript APIs defined by web browsers. The 6th edition covers HTML5 and ECMAScript 5, with new chapters on jQuery and server side JavaScript. It's recommended for experienced programmers who want to learn the programming language of the Web, and for current JavaScript programmers who want to master it. 目录: Chapter 1 Introduction to JavaScript Core JavaScript Chapter 2 Lexical Structure Chapter 3 Types, Values, and Variables Chapter 4 Expressions and Operators Chapter 5 Statements Chapter 6 Objects Chapter 7 Arrays Chapter 8 Functions Chapter 9 Classes and Modules Chapter 10 Pattern Matching with Regular Expressions Chapter 11 JavaScript Subsets and Extensions Chapter 12 Server-Side JavaScript Client-Side JavaScript Chapter 13 JavaScript in Web Browsers Chapter 14 The Window Object Chapter 15 Scripting Documents Chapter 16 Scripting CSS Chapter 17 Handling Events Chapter 18 Scripted HTTP Chapter 19 The jQuery Library Chapter 20 Client-Side Storage Chapter 21 Scripted Media and Graphics Chapter 22 HTML5 APIs Core JavaScript Reference Client-Side JavaScript Reference Colophon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值