【JavaScript】正则表达式

JavaScript中用RegExp对象表示正则表达式,可以用RegExp()构造函数来创建正则表达式,不过更多时候是用对象直接量来创建
如:var re = /s$/;这个正则表达式可以匹配以字符s结尾的字符串

1.字符类###

把字符放进方括号就变成了字符类,一个字符类可以匹配它所包含的任意字符。
如:/[abc]/与字母a、b、c中的任意一个都匹配。
常见字符类
[abc] 方括号内任意字符
[^abc] 不在方括号内的任意字符
. 除换行符和其他Unicode行终止符之外的任意字符
\w 任何ASCII字符组成的单词,等价于[a-zA-Z0-9]
\W 任何不是ASCII字符组成的单词,等价于[^a-zA-Z0-9]
\s 任何Unicode空白符
\d 任何ASCII数字

2.重复###

{n,m} 匹配前一项至少n次,至多m次
{n,}   匹配前一项n次或更多次
{n}  匹配前一项n次
?   匹配前一项0次或1次
+   匹配前一项1次或多次
*   匹配前一项0次或多次

栗子:
/\d{2,4}/ 匹配2-4个数字
/\w{3}\d? 匹配3个字符和一个可选的数字

3.分组###

字符”|“用于分隔供选择的字符,如/ab|cd|ef/可匹配字符串”ab“,也可匹配”cd“,还可匹配”ef“。
圆括号"()"可用于把单独的项组合成子表达式

4.修饰符###

修饰符放在"/"之外,用语说明匹配模式。JavaScript支持三种修饰符
i    执行不区分大小写的匹配
g   执行全局匹配,即找到所有的匹配,而不是在找到第一个后就停止
m  执行多行匹配。在这种模式下,如果被检索的字符串包含多行,^和$分别匹配每一行的开头和结束

5.指定匹配位置###

^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配单词的边界
(?=p) 零宽正向先行断言,要求接下来的字符都与p匹配
(?!p) 零宽负向先行断言,要求接下来的字符都不与p匹配
/Java(?!Script)/g匹配以“Java”开头,但接下来的字符不是“Script”的字符串

5.RegExp对象###

  • RegExp对象的属性
    source:只读的字符串,包含正则表达式的源文本
    lastIndex:一个可读写的整数,如果匹配模式带有g修饰符,这个属性用于存储下次匹配的起始位置。
  • RegExp对象的方法
    exec():检索字符串中指定的值。如果找到匹配的值,返回一个结果数组,并确定其位置。如果没有找到匹配的值,就返回null
var str = 'Hello World';
var re = /Wo/g;
var result = re.exec(str);
if(result != null){
    console.log('Find '+result+' at '+result.index);//输出Find Wo at 6
    console.log('next search begin at '+re.lastIndex);//输出next search begin at 8
}

test():参数是一个字符串,如果成功匹配,返回true;如果没有匹配到结果,返回false

6.支持正则表达式的String对象的方法###

String对象支持4种使用正则表达式的方法。

  • search():参数是一个正则表达式,返回一个与之匹配的子串的起始位置,如果找不到子串,返回-1。
  • replace():执行检索和替换。第一个参数是一个正则表达式,第二个参数是一个内容为替换文本的字符串。
//将Lebron James替换为James Lebron
var name = 'Lebron James';
var result = name.replace(/(\w+)\s*\s*(\w+)/g,'$2 $1');
console.log(result);
  • match():唯一参数是一个正则表达式,返回一个由匹配结果组成的数组。
//匹配出字符串中的数字,将其保存到一个数组中
var str = 'rgb(237,13,235)';
var result = str.match(/\d+/g);
console.log(result);//输出["237", "13", "235"]
  • split():将调用它的字符串拆分成一个子串组成的数组。第一个参数可以是字符串或者正则表达式,第二个可选参数可以指定返回数组的最大长度。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容