一种字符串匹配的模式,用来检查一个串是否含有某种子串、
将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
注意:在javascript中正则表达式也是一种对象
1:创建正则表达式
两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)
eg:
文字量方法:var regExp = /pattern/flags;
将文字量的正则表达式赋值给一个变量,包含在两个斜杠之间的一个或多个字符,在后一个斜杠的后面,可以指定一个或多个选项。
var regExp1 = /abc/;
var regExp2 = /abc/gi;
使用构造函数:var regExp =new RegExp("pattern","flags");
构造函数RegExp()中有2个参数:
第一个参数指定正则表达式,这是正则表达式的字符串表示方法.
第二个参数是可选参数,它指定正则表达式的选项.(同上flags)
var regExp1 = new RegExp("abc");
var regExp2 = new RegExp("abc","gi");
(一)相关的语法
由普通字符和特殊字符(元字符)组成。
普通字符包括:数字,大小写字母,下划线等
特殊字符:() [] {} ^ $ * ? \ | + .
普通字符可以直接拿来用,特殊字符是一定要转义。
1:量词
? 出现零次或一次
* 出现零次或多次(任意次)
+ 出现一次或多次(至少一次)
{n} 对应n次
{n,m} 至少出现n次但不超过m次(中间不能有空格)
{n,} 至少出现n次
eg:
/ab*/表示一个字符串有一个a后面跟着零个或若干个b。(a, ab, abbb……)
/ab+/表示一个字符串有一个a后面跟着一个b或者更多b。 (ab, abbb……)
/ab?/表示一个字符串有一个a后面跟着零个或者一个b。 (a, ab)
/a?b+$/表示在字符串的末尾有零个或一个a跟着一个或几个b。(b, ab, abbb……)
/ab{2}/表示一个字符串有一个a跟着2个b(abb)。
/ab{2,}/表示一个字符串有一个a跟着至少2个b。(abb, abbb……)
/ab{3,5}/表示一个字符串有一个a跟着3到5个b。(abbbbb, abbb)
2:修饰符
i:表示忽略大小写,就是在字符串匹配的时候不区分大小写
g:表示全局匹配,即匹配字符串中出现的所有模式
m:表示进行多行匹配
3:中文或者
[\u4e00-\u9fa5]表示中文集
| 表示或
eg:
/hi|hello/表示一个字符串里有hi或者hello
/(b|cd)ef/表示bef或cdef
/(a|b)*c/表示有0个或多个a加上c或者有0个或多个b加上c;
4:预定义类
. [^\n\r] 除了换行和回车之外的任意字符
\d [0-9] 数字字符
\D [^0-9] 非数字字符
\s 空白字符
\S 非空白字符
\w [a-zA-Z_0-9] 单词字符(所有的字母)
\W [^a-zA-Z_0-9] 非单词字符
eg:
/a.[0-9]/表示一个字符串有一个a后面跟着一个除了换行和回车之外的任意字符和一个数字;
/^.{3}$/表示有任意三个字符的字符串(长度为3)
5:字符串的首尾
字符串的起始位置我们用^
eg:
/^abc/ 判断字符串是否是以abc开始的
/^The/表示所有以The开始的字符串There,The frfr等
字符串的结束位置我们用$
eg:
/xyz$/ 判断字符串是否是以xyz结尾的
6:字符集
(1)简单类
它是有一一对应的字符组成的集合,通过[]包裹住,来表示这几个字母组成的一个集合
eg:
[abc123]表示由abc123六个字符组成的一个集合
eg:
/[ab]/表示一个字符串有一个a或b
(2)范围类
通过首位字母末尾字母以及-组成的一个范围集合
[a-z] 表示小写字母集合。
eg:
/[a-d]/表示一个字符串包含小写的a到d中的一个
[A-Z] 表示大写字母集合。
eg:
/[A-D]/表示一个字符串包含小写的A到D中的一个
eg:
/^[a-zA-Z]/表示一个以字母开头的字符串
[0-9] 表示数字集合。
eg:
/[0-9]/表示一个字符串包含小写的0到9中的一个
(3)负向类
通过在[]内部最前面添加^来表示不包含该集合的字符集
eg:
[^abc] 表示不包含abc的任意字符集合
(4)组合类
通过[]将几个集合拼接在一起表示一个组合的集合。
eg:
[a-zA-Z0-9] 表示大小写字母以及数字的结合
7:预定义特殊字符
\t 制表符
\n 回车符
\f 换页符
\b 与回退字符
(二)相关的方法
字符串相关方法: search, match, split
返回数字类型:search
返回数组的方法:match,split
返回字符串的方法:replace
1:split
把一个字符串分割成字符串数组。
stringObject.split(separator,howmany)
separator字符串或正则表达式(必选)
howmany该参数可指定返回的数组的最大长度(可选)
(1)正则表达式
注意''和' ';
' '表示的空格数量,一个还是两个切割
var str="Hello world"
var strarr=str.split(" ");
console.log(strarr);
//["Hello", "world"]
var str="Hello,world"
var strarr=str.split(",");
console.log(strarr);
//["Hello", "world"]
var strarr="hello".split("");
console.log(strarr);
//["h", "e", "l", "l", "o"]
var str="Hello,world"
var strarr=str.split(",",1);
console.log(strarr);
//["Hello"]
(2)正则切割
var str = 'a b c';
console.log(str.split(''))
console.log(str.split(/\s+/))
//["a", " ", " ", " ", "b", " ", "c"]
//["a", "b", "c"]
2:search
获取字符在字符串中的位置
stringObject.search(regexp)
regexp字符串或者正则对象
未找到任何匹配的子串,则返回 -1。
search() 方法不执行全局匹配,忽略标志 g,总是从字符串的开始进行检索,
var str="Hello world!"
var newstr=str.search("world");
console.log(newstr);
//6
var str="Hello world!"
var newstr=str.search(/world/);
console.log(newstr);
//6
var str="abcabc!"
var newstr=str.search(/a/);
console.log(newstr);
//0
var str="abcabc!"
var newstr=str.search(/a/g);
console.log(newstr);
//0
3:match
字符串内检索指定的值,或找到一个或多个(regexp 是否具有标志 g,若不具有则执行一次匹配就结束)正则表达式的匹配。
返回包含指定的值数组,没有找到则返回一个null
stringObject.match(searchvalue)
stringObject.match(regexp)
eg:
var str = 'abbcccbbbbbddbbbdabbbsbbccdb';
console.log(str.match(/b+/g))
console.log(str.match('bb'))
//["bb", "bbbbb", "bbb", "bbb", "bb", "b"]
//["bb", index: 1, input: "abbcccbbbbbddbbbdabbbsbbccdb"]
var str="Hello world!"
console.log(str.match("world"))
console.log(str.match("World"))
// ["world", index: 6, input: "Hello world!"]
//null
4:replace
在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
stringObject.replace(regexp/substr,replacement)
regexp/substr:要替换的模式的 RegExp 对象或子字符串(必须)
regexp具有全局标志 g,将全局匹配。否则,它只替换第一个匹配子串
replacement替换文本或生成替换文本的函数(要有返回值,并且将这个返回值作为字符串)。(必须)
返回值是一个新字符串
(1)replacement表示替换文本
eg:
"abcd".replace("a","0");
//"0bcd"
"abcda".replace("a","0");
//"0bcda"
eg:
var str="Hello world world!"
var newstr=str.replace(/world/, "W")
var newstr1=str.replace(/world/g, "W")
console.log(str);
console.log(newstr);
console.log(newstr1);
//Hello world!
//Hello W!
//Hello W W!
(2)replacement表示函数,函数自带参数
replacement 中的 $ 字符具有特定的含义
$1、$2、...、$99与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
每个匹配都调用该函数,return的值就是要替换的值。
第一个参数是匹配上的字符串。
第二个参数匹配上的字符串的下标
最后一个参数是 源字符串。
var str = "你好吗,你真的好吗,你一定要好好哒";
str = str.replace(/你/g,function(a,b,d){
console.log(arguments);
return "他/她";
});
console.log(str);
//["你", 0, "你好吗,你真的好吗,你一定要好好哒"]
//["你", 4, "你好吗,你真的好吗,你一定要好好哒"]
//["你", 10, "你好吗,你真的好吗,你一定要好好哒"]
//他/她好吗,他/她真的好吗,他/她一定要好好哒
var str = "每天200元,吃饭40元";
newstr = str.replace(/\d+元/g,function(a){
console.log(a);
return "$" + Math.round((parseInt(a) / 6) * 100) / 100;
});
console.log(str);
console.log(newstr);
//200元
//40元
//每天200元,吃饭40元
//每天$33.33,吃饭$6.67
(3)replacement分组
var str = "hello world";
newstr = str.replace(/(\w+)\s(\w+)/,"$2 $1");
console.log(newstr);
//world hello
var str = "hello world";
newstr = str.replace(/(\w+)\s(\w+)/,function(match,$1,$2,index,str){
console.log(match); //第一个匹配到的字符串
console.log($1); //第一个匹配的
console.log($2); //第二个匹配的 /////继续向后
console.log(index); //匹配到的字符串出现的位置
console.log(str); //最后一个源串
});
console.log(newstr);
//hello world
//hello
//world
//0
//hello world
var jsondata= {
xingming : "哈哈",
xingbie : "女"
}
var str = "大家好,我叫!xingming!,我是个!xingbie!生"
str = str.replace(/!(\w+)!/g,function(match,$1){
return jsondata[$1];
});
console.log(str);
//大家好,我叫哈哈,我是个女生
正则相关方法: exec和test
exec返回一个数组
test返回的是布尔值
1:exec
与String对象的match()方法类似
返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
RegExpObject.exec(string)
var strreg = /abc/g;
var new1=strreg.exec('abcd');
console.log(new1);
//["abc", index: 0, input: "abcd"]
var strreg = /abc/g;
var new2=strreg.exec('abc');
console.log(new2);
//["abc", index: 0, input: "abc"]
var strreg = /abc/g;
var new3=strreg.exec('ab');
console.log(new3);
//null
2:test
检测一个字符串是否匹配某个模式.
RegExpObject.test(string)
字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
var mystring ="hello world World!";
var regexp = /wo/i;
console.log(regexp.test(mystring))
//true

javascript正则表达式(regular expression)的更多相关文章

  1. (六)JavaScript之[Regular Expression]与[错误(try, catch, throw)]

    10].正则表达式 /** * 正则表达式(Regular Expression): * * 用于文本搜索和文本替换 * */ /** * /good/i是一个正则表达式. * good是一个模式(用 ...

  2. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  3. 正则表达式-Regular expression学习笔记

    正则表达式 正则表达式(Regular expression)是一种符号表示法,被用来识别文本模式. 最近在学习正则表达式,今天整理一下其中的一些知识点 grep - 打印匹配行 grep 是个很强大 ...

  4. 正则表达式(Regular Expression, RegEx)学习入门

    1. 概述 正则表达式(Regular Expression, RegEx)是一种匹配模式,描述的是一串文本的特征. 正如自然语言中高大.坚固等词语抽象出来描述事物特征一样,正则表达式就是字符的高度抽 ...

  5. java 正则表达式 -Regular Expression

    正则表达式(Regular Expression),可以说就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式.正则表达式定义了字符串的模式,可以用来搜索.编辑或处理文本,不仅限于某一种语言(P ...

  6. Python正则表达式Regular Expression基本用法

    资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表 ...

  7. C#中【正则表达式regular expression】相关的知识

    Regex System.Text.RegularExpressions.Regex      regex应该是regular expression的缩写 https://msdn.microsoft ...

  8. Python -- 正则表达式 regular expression

    正则表达式(regular expression) 根据其英文翻译,re模块 作用:用来匹配字符串.  在Python中,正则表达式是特殊的字符序列,检查一个字符串是否与某种模式匹配. 设计思想:用一 ...

  9. Python中的正则表达式regular expression

    1 match = re.search(pat,str)  If the search is successful, search() returns a match object or None o ...

随机推荐

  1. [目前未找到题目]扩展KMP模板

    procedure build_next; begin lena:=length(a);lenb:=length(b); next[]:=lenb;next[]:=lenb-; to lenb- ] ...

  2. scrapy的CrawlSpider使用

    1.创建项目 我这里的项目名称为scrapyuniversal,然后我创建在D盘根目录.创建方法如下 打开cmd,切换到d盘根目录.然后输入以下命令: scrapy startproject scra ...

  3. 预处理ifndef

    #ifdef 详解 这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”.有 ...

  4. javascript 实现购物车页面

    跟商城有关系的网站,难免会有购物车的结账界面. 我用javascript实现了增加数量/减少数量,实时计算总金额,删除该商品,选中商品/反选商品/全选/全反选...的操作. 欢迎指点!~ 效果如图:( ...

  5. 4.flask数据库

    1.安装MySQL 直接去下载即可,如果是windows建可以下载msi,一路next即可.我已经安装过了,这里就不再演示了. 最后使用Navicat连接测试一下,我这里是没有问题的 2.SQLAlc ...

  6. python--requests_html

    这个模块从名字上也能看出来,是专门用来解析html的,这个和requests的作者是同一人,非常牛逼的一位大佬. 大致读了一下源码,总共一个py文件(但是引用了其他的模块),加上注释总共才700多行, ...

  7. sql ---- count 误区

    select count(字段名) from table group by 字段; 分组后的内容统计. count统计的字段是 不包括空的数据.

  8. Selenium2+python自动化35-获取元素属性【转载】

    前言 通常在做断言之前,都要先获取界面上元素的属性,然后与期望结果对比.本篇介绍几种常见的获取元素属性方法. 一.获取页面title 1.有很多小伙伴都不知道title长在哪里,看下图左上角. 2.获 ...

  9. Scanner类的个人分析

    Scanner类读取键盘输入(java中Scanner类nextLine()和next()的区别和使用方法&&java 中的Scanner(非常详细不看后悔)): 2017/3/18 ...

  10. java callable future futuretask

    Runnbale封装一个异步运行的任务,可以把它想象成一个没有任何参数和返回值的异步方法.Callable和Runnable相似,但是它有返回值.Callable接口是参数化的类型,只有一个方法cal ...