JS—正则表达式
正则表达式的元字符是包含特殊含义的字符,它们有一些特殊的功能,可以控制匹配模式的方式,反斜杠后的元字符失去其特殊含义。
- 单个字符和数字
.表示匹配除换行符外的单个字符,两个.就表示匹配两个字符var pattern1=/g.gle/;
alert(pattern1.test('gogle'))//true
alert(pattern1.test('g\ngle'))//换行符false
alert(pattern1.test('ggle'))//没有匹配false
var pattern2=/g..gle/;
alert(pattern2.test('google'))//true
alert(pattern2.test('gooogle'))//false[a-z0-9A-Z][a-z]表示26个小写字母任意一个都匹配var pattern1=/[a-z]oogle/;
alert(pattern1.test('hoogle'))//true
alert(pattern1.test('google'))//true[A-Z]表示26个大写字母任意一个都匹配var pattern1=/[A-Z]oogle/;
alert(pattern1.test('Aoogle'))//true
alert(pattern1.test('google'))//false[0-9]表示0-9任意一个数字都匹配var pattern1=/[0-9]oogle/;
alert(pattern1.test('000000oogle'))//true
alert(pattern1.test('google'))//flase[a-zA-Z0-9]表示匹配任意字母与数字var pattern1=/[a-zA-Z0-9]oogle/;
alert(pattern1.test('0oogle'))//true
alert(pattern1.test('google'))//true
alert(pattern1.test('Foogle'))//true【结合重复字符使用】表示可以匹配任意多个字符
var pattern1=/[0-9]*oogle/;
alert(pattern1.test('oogle'))//true
alert(pattern1.test('00000google'))//true
[^a-z]表示取非,任意非小写字母var pattern1=/[^a-z]oogle/;
alert(pattern1.test('0oogle'))//true
alert(pattern1.test('google'))//flase
alert(pattern1.test('Foogle'))//true当然也可以是任意非大写字母,非数字,非~
\w小写表示匹配字母数字及_var pattern1=/[a-zA-Z0-9_]oogle/;//可以被后者取代
var pattern2=/\woogle/;
alert(pattern2.test('_oogle'))//true
alert(pattern2.test('.oogle'))//false\W大写是小写的否定即,表示匹配任意非数字字母下划线\d匹配数字var pattern1=/[0-9]oogle/;
var pattern2=/\doogle/;
alert(pattern2.test('2oogle'))//true
alert(pattern2.test('.oogle'))//false\D大写取非咯
空白字符
\s表示空白匹配var pattern1=/goo\sgle/;
alert(pattern1.test('goo gle'))//true
锚字符
^[]放在中括号外面哦,表示限制中括号内的内容出现在字符串的开始,[]$表示限制中括号的内容,或紧邻其的一个字符需要出现在字符串的结尾var pattern1=/^google$/;
alert(pattern1.test('google'))//true
var pattern2=/^google/;
alert(pattern2.test('googleeeeee'))//true
var pattern3=/google$/;
alert(pattern3.test('gggggoogle'))//true
var pattern1=/^google[0-9]$/;
alert(pattern1.test('google7777'))//false
alert(pattern1.test('google7'))//true\b表示是否达到边界var pattern1=/google\b/;
alert(pattern1.test('google'))//true
var pattern1=/google\b/;
alert(pattern1.test('googlee'))//flase
- 重复字符
*表示匹配0个或任意多个*前面的字符var pattern1=/go*gle/;
alert(pattern1.test('ggle'))//true
alert(pattern1.test('gogle'))//true
alert(pattern1.test('gooogle'))//true+表示匹配1个或多个+前面的字符var pattern1=/go+gle/;
alert(pattern1.test('ggle'))//false
alert(pattern1.test('gogle'))//true
alert(pattern1.test('gooogle'))//true?表示匹配0个或一个?前面的字符var pattern1=/go?gle/;
alert(pattern1.test('ggle'))//true
alert(pattern1.test('gogle'))//true
alert(pattern1.test('gooogle'))//false这个是表示对任意字符的重复限制。
var pattern1=/g.?gle/;
alert(pattern1.test('ggle'))//true
alert(pattern1.test('gbgle'))//true{m,n}匹配m~n个包括m与n个var pattern1=/go{2,4}gle/;
alert(pattern1.test('gooooogle'))//false
alert(pattern1.test('google'))//true表示只匹配限定个数个
var pattern1=/go{2}gle/;
alert(pattern1.test('gooooogle'))//false
alert(pattern1.test('google'))//true表示至少匹配某个
var pattern1=/go{2,}gle/;
alert(pattern1.test('gooooogle'))//true
alert(pattern1.test('google'))//true()+匹配至少一个模式var pattern1=/(google)+/;//对google这个字符串进行重复匹配
alert(pattern1.test('googlegooglegoogle'))//true
- 或字符
或模式匹配var pattern1=/google|baidu|bing/;//或模式匹配
alert(pattern1.test('this is baidu'))//true
alert(pattern1.test('soso'))//false - 替代字符
var pattern1=/(.*)\s(.*)/;//替换
var str='google baidu';
alert(str.replace(pattern1,'$2 $1'));//baidu google
var pattern1=/8(.*)8/;//获取88之间的任意字符
var str='this is 8google8';
document.write(str.replace(pattern1,'<strong>$1</strong>')) - 记录字符
- 分组
var pattern1=/(google){2,4}/;//对google这个字符串进行重复匹配
alert(pattern1.test('googlegooglegoogle'))//true
alert(pattern1.test('google'))//flase - 捕获分组
var pattern1=/8(.*)8/;//获取88之间的任意字符
alert(pattern1.test('this is 8google8'))//true
alert(RegExp.$1);//google表示获取模式中第一个分组对应的匹配的字符串,必须得运行过。
- 分组
贪婪与惰性
- 贪婪模式
var pattern=/8(.*)8/;// 使用了贪婪,匹配到了google8 8google8 8google
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>')) - 惰性模式
var pattern=/8(.*?)8/g;//惰性模式,全部匹配
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'))在*后面多加一个?表示取消贪婪模式,进行惰性模式,只进行匹配一个。
下面这个是没有采用惰性模式,只是将匹配的结果中除去了8var pattern=/8([^8]*)8/g;//惰性模式,全部匹配
var str='8google8 8google8 8google8';
document.write(str.replace(pattern,'<strong>$1</strong>'))
- 捕获与非捕获
未添加分组时:.exec只返回当前位置匹配的字符串var pattern=/[a-z]*\s\d{4}/;
var str='google 2015';
alert(pattern.exec(str));//google 2015添加分组后,该分组内容被捕获,并赋给exec所返回的数组
var pattern=/([a-z]*)\s(\d{4})/;
var str='google 2015';
alert(pattern.exec(str));//google 2015,goole,2015非捕获即取消分组被捕获
(?:)通过在分组前加上问号与冒号,便可以取消捕获该分组。var pattern=/([a-z]*)\s(?:\d{4})/;
var str='google 2015';
alert(pattern.exec(str));//google 2015,goole - 分组嵌套
嵌套分组需要~从外往内获取~var pattern=/(a?(b?(c?)))/;
var str='abc';
alert(pattern.exec(str));//abc,abc,bc,c第一步:获得匹配字符串:abc
第二步:获得第一个分组,即最外层:abc
第三步:获得第二个分组,bc
第四步:获得最内层分组c - 使用前瞻捕获
var pattern=/goo(?=gle)/;
var str='google';
alert(pattern.exec(str));//goo在正则匹配的字符串之后添加一对(),该括号内定义了匹配条件,只有当满足条件时,才可以进行匹配。注意该例子的最后匹配值为goo。
- 使用特殊字符匹配
var pattern=/\[/;
var str='[';
alert(pattern.test(str));//true对于要匹配特殊最的情况,需要在其前加上斜杠,来标识。
换行模式
var pattern=/\d+/g;
var str='1、abc\n2、edf';
alert(str.replace(pattern,'#'));//完全匹配,并替换 var pattern=/^\d+/g;
var str='1、abc\n2、edf';
alert(str.replace(pattern,'#'));//匹配第一个 var pattern=/^\d+/gm;
var str='1、abc\n2、edf';
alert(str.replace(pattern,'#'));//完全匹配,并替换当字符串内出现换行符时,如果我们不进行锚字符的使用,那么会匹配全局,包括换行后的。
但是,由于使用锚字符,导致即使使用了全局,也没有办法匹配换行后的结果,此时需要开启换行。
JS—正则表达式的更多相关文章
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- 使用外部web组件-----easyUI、jQueryUI、Bootstrap、js正则表达式
1.使用外部web组件,以Bootstrap为例 <head> <link rel='stylesheet' href='bootstrap-3.3.0-dist/dist/css ...
- js正则表达式图形化工具-rline
github地址:https://github.com/finance-sh/rline 在线demo: http://lihuazhai.com/demo/test.html 这是一个js正则表达式 ...
- Python之路-(js正则表达式、前端页面的模板套用、Django基础)
js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- JS正则表达式大全
转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...
- js正则表达式replace里有变量的解决方法用到RegExp类
一直比较害怕使用正则表达式,貌似很深奥很复杂的样子,所以在用js操作字符串的时候,我最多使用的是replace.split.substring.indexOf等函数,这些函数有时候需要多次叠加使用,但 ...
- JS正则表达式验证账号、手机号、电话和邮箱
JS正则表达式验证账号.手机号.电话和邮箱 效果体验:http://keleyi.com/keleyi/phtml/jstexiao/15.htm 验证帐号是否合法 验证规则:字母.数字.下划线组成, ...
- 初识JS正则表达式
初识JS正则表达式 看到的使用的正则表达式练习:http://www.cnblogs.com/wenanry/archive/2010/09/06/1819552.html PS:本文参考李炎恢JS笔 ...
- 常用JS正则表达式
常用JS正则表达式 收集一些常用的JavaScript正则表达式匹配规则,比如匹配电话号码.Email.中文字符.身份证号.邮编.QQ号.过滤空白行.匹配特定数字等.觉得这玩意是很有用的,只不过自己水 ...
- JS正则表达式大全(整理详细且实用)
JS正则表达式大全(整理详细且实用).需要的朋友可以过来参考下,希望对大家有所帮助!! 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释, ...
随机推荐
- maven第一个HelloWorld
1.Maven约定好的目录结构: maven01/src --main --java --package //包有多少级,加多少个子folder --新建一个HelloWorld.java --tes ...
- HDFS集群和YARN集群
Hadoop集群环境搭建(一) 1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要 ...
- 51nod 1851俄罗斯方块(trick)
题目大意:给出一个黑白图,你可以选定一个俄罗斯方块的区域,黑白翻转,问能否变成白图 比较trick的题目, 首先可以想到,奇数个1肯定是无解的,所以考虑偶数个1 可以先讨论n是2的情况 当n为2时,其 ...
- [CF620E]New Year Tree
题目大意:有一棵以$1$为根的有根树,有$n$个点,每个节点初始有颜色$c_i$.有两种操作: $1 v c:$将以$v$为根的子树中所有点颜色更改为$c$ $2 v:$ 查询以$v$为根的子树中的节 ...
- 【NOIP模拟赛】黑红树 期望概率dp
这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...
- (一)STM32固件库详解(转载)
本篇博文是转载自emouse,因为不能直接转载,所以是复制过来再发布的. emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/ 1.1 基于标准外设库的 ...
- SICAU-OJ: 第k小
第k小 题意: 给出一个长度不超过5000的字符串,然后让你找出第K小的字串(1<=K<=5).重复的串大小相等. 题解: 这里我们知道某些串的前缀是肯定小于等于其本身的. 那么长度为5的 ...
- BZOJ1040 骑士 基环外向树
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6421 Solved: 2544[Submit][Status ...
- HTML5学习之新增标签
转自:http://www.cnblogs.com/fly_dragon/archive/2012/05/25/2516142.html 作者:FlyDragon 一.引言 在本节中,笔者将向大家讲述 ...
- domReady的兼容性实现方法
一.为何要实现domReay方法? 举例: <!DOCTYPE html> <html lang="en"> <head> <meta c ...