javascript基础知识之正则表达式(regular expression)

一种字符串匹配的模式,用来检查一个串是否含有某种子串、
将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
注意:在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

时间: 2024-11-06 01:44:40

javascript基础知识之正则表达式(regular expression)的相关文章

JavaScript基础知识梳理----正则表达式

JavaScript基础知识梳理----正则表达式 1.创建 方式:---字面量:var 变量名=/表达式/模式修饰符 ---构造函数:var 变量名=new RegExp(“表达式”,“模式修饰符”) 说明: 表达式 单个字符和数字 . 匹配除换行符之外的任意字符 [a-z0-9] 匹配方括号中的任意字符 [^a-z0-9] 匹配不在方括号中的任意字符 \d 匹配数字 \D 匹配非数字 \w 匹配字母 \W 匹配非字母 空白字符 \0 匹配null字符 \b 匹配空格符 \f 匹配进纸符 \n

Javascript基础知识5

不要把相等运算符(==)与赋值运算符(=)搞混. 以&&运算符隔开的两个条件中的前者为错,则不会检测第二个条件的真假.利用这一点,可以提高脚本的速度. 使用带switch的多个条件 if(button=="next") window.location = "next.html"; else if(button=="previous") window.location = "pre.html"; else if(

javascript 基础知识

javascript 基础知识编程规范注释 //驼峰对象化编程 数据类型字符串.数字.布尔.数组.对象.Null.Undefined定义 var carname=new String; var x= new Number; var y= new Boolean; var cars= new Array; var person= new Object; 字符串 var word = "Hello World!"; 数字 var x1 = 34.00; //使用小数点来写 var x2 =

JavaScript基础知识梳理--数组

JavaScript基础知识梳理--数组 1.创建方法 空数组:var obj=new Array(); 指定长度数组: var obj=new Array( size ); 指定元素数组 :  var obj=new Array( 元素1,元素2,....): 单位数组:var obj=new Array[ 元素1,元素2,元素3,...,元素N]; 多维数组:var a=new Array( [数组1],[数组2],[数组3],...,[数组N] ); 2.基本操作 存取数组元素: 单维数组

(1)JavaScript基础知识

Javascript基础知识 1.如何使用JavaScript (1).通过<script></script>中直接编写 (2).通过<script src='目标文档的URL'></script>链接外部的Js文件 ① <script  src="URL" type="text/javascript" charset="utf-8"></script> (3).作为某个元素

Javascript基础知识4

字符串大小写转换 toUpperCase()将所有的字符串转换成大写 toLowerCase()将所有的字符串转换成小写 substring(x,y)返回字符串的一部分,从x开始到y结束 charAt(x)获取第x个字符 indexOf("",x)查找字符串, 第一个内容是字符串,第二个是从第x开始 得到的值为这个字符串是从第几个字符开始的 同样lastindexOf()从最后开始查找 split("")分离字符串,内容为以什么分离, 得到的是一个数组 同理,将一个

正则表达式 ( Regular Expression )

正则表达式中的元字符 字符 说明 \ 将下一字符标记为特殊字符.文本.反向引用或八进制转义符.例如,“n”匹配字符“n”.“\n”匹配换行符.序列“\\”匹配“\”,“\(”匹配“(”. ^ 匹配输入字符串开始的位置.如果设置了 RegExp 对象的 Multiline 属性,^ 还会与“\n”或“\r”之后的位置匹配. $ 匹配输入字符串结尾的位置.如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“\n”或“\r”之前的位置匹配. * 零次或多次匹配前面的字符或子表达式.

javascript 基础知识1 数据类型

首先javascript是一种具有面向对象能力的,解释型程序设计语言. js对大小写敏感,一定要采取一致的字符大小写形式,在js中的结束分号(:)是可选的,为了避免JS语句错误,我们还是要注意添加,养成良好的编写习惯. 下面看看数据类型和值. JS有7种数据类型:字符串.数字.布尔.数组.对象.Null.Undefined 字符串类型:由Unicode字符,数字,标点符号组成的序列,可以为多个字符,也可以为0个字符. 1 <script> 2 // var用于声明一个变量 3 var stri

javascript基础知识拾遗

1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console.log(0||true); //true console.log(''||true); //true console.log(false||true); //true console.log(null||true); //true console.log(NaN||true); //true co