致我们致单纯的小美好全集集百度云?

RegExp - 廖雪峰的官方网站
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
所以我们判断一个字符串是否是合法的Email的方法是:
创建一个匹配Email的正则表达式;
用该正则表达式去匹配用户的输入来判断是否合法。
因为正则表达式也是用字符串表示的,所以,我们要首先了解如何用字符来描述字符。
在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字,所以:
'00\d'可以匹配'007',但无法匹配'00A';
'\d\d\d'可以匹配'010';
'\w\w'可以匹配'js';
.可以匹配任意字符,所以:
'js.'可以匹配'jsp'、'jss'、'js!'等等。
要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:
来看一个复杂的例子:\d{3}\s+\d{3,8}。
我们来从左到右解读一下:
\d{3}表示匹配3个数字,例如'010';
\s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ','\t\t'等;
\d{3,8}表示3-8个数字,例如';。
综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。
如果要匹配'010-12345'这样的号码呢?由于'-'是特殊字符,在正则表达式中,要用'\'转义,所以,上面的正则是\d{3}\-\d{3,8}。
但是,仍然无法匹配'010 - 12345',因为带有空格。所以我们需要更复杂的匹配方式。
要做更精确地匹配,可以用[]表示范围,比如:
[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;
[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','js2015'等等;
[a-zA-Z\_\$][0-9a-zA-Z\_\$]*可以匹配由字母或下划线、$开头,后接任意个由一个数字、字母或者下划线、$组成的字符串,也就是JavaScript允许的变量名;
[a-zA-Z\_\$][0-9a-zA-Z\_\$]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B可以匹配A或B,所以(J|j)ava(S|s)cript可以匹配'JavaScript'、'Javascript'、'javaScript'或者'javascript'。
^表示行的开头,^\d表示必须以数字开头。
$表示行的结束,\d$表示必须以数字结束。
你可能注意到了,js也可以匹配'jsp',但是加上^js$就变成了整行匹配,就只能匹配'js'了。
有了准备知识,我们就可以在JavaScript中使用正则表达式了。
JavaScript有两种方式创建一个正则表达式:
第一种方式是直接通过/正则表达式/写出来,第二种方式是通过new RegExp('正则表达式')创建一个RegExp对象。
两种写法是一样的:
var re1 = /ABC\-001/;
var re2 = new RegExp('ABC\\-001');
re1; // /ABC\-001/
re2; // /ABC\-001/
注意,如果使用第二种写法,因为字符串的转义问题,字符串的两个\\实际上是一个\。
先看看如何判断正则表达式是否匹配:
var re = /^\d{3}\-\d{3,8}$/;
re.test('010-12345'); // true
re.test('010-1234x'); // false
re.test('010 12345'); // false
RegExp对象的test()方法用于测试给定的字符串是否符合条件。
切分字符串
用正则表达式切分字符串比用固定的字符更灵活,请看正常的切分代码:
c'.split(' '); // ['a', 'b', '', '', 'c']
嗯,无法识别连续的空格,用正则表达式试试:
c'.split(/\s+/); // ['a', 'b', 'c']
无论多少个空格都可以正常分割。加入,试试:
'a,b, c
d'.split(/[\s\,]+/); // ['a', 'b', 'c', 'd']
再加入;试试:
'a,b;; c
d'.split(/[\s\,\;]+/); // ['a', 'b', 'c', 'd']
如果用户输入了一组标签,下次记得用正则表达式来把不规范的输入转化成正确的数组。
除了简单地判断是否匹配之外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)。比如:
^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:
var re = /^(\d{3})-(\d{3,8})$/;
re.exec('010-12345'); // ['010-12345', '010', '12345']
re.exec('010 12345'); // null
如果正则表达式中定义了组,就可以在RegExp对象上用exec()方法提取出子串来。
exec()方法在匹配成功后,会返回一个Array,第一个元素是正则表达式匹配到的整个字符串,后面的字符串表示匹配成功的子串。
exec()方法在匹配失败时返回null。
提取子串非常有用。来看一个更凶残的例子:
var re = /^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$/;
re.exec('19:05:30'); // ['19:05:30', '19', '05', '30']
这个正则表达式可以直接识别合法的时间。但是有些时候,用正则表达式也无法做到完全验证,比如识别日期:
var re = /^(0[1-9]|1[0-2]|[0-9])-(0[1-9]|1[0-9]|2[0-9]|3[0-1]|[0-9])$/;
对于'2-30','4-31'这样的非法日期,用正则还是识别不了,或者说写出来非常困难,这时就需要程序配合识别了。
需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0:
var re = /^(\d+)(0*)$/;
re.exec(';); // [';, ';, '']
由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。
必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:
var re = /^(\d+?)(0*)$/;
re.exec(';); // [';, '1023', '00']
JavaScript的正则表达式还有几个特殊的标志,最常用的是g,表示全局匹配:
var r1 = /test/g;
// 等价于:
var r2 = new RegExp('test', 'g');
全局匹配可以多次执行exec()方法来搜索一个匹配的字符串。当我们指定g标志后,每次运行exec(),正则表达式本身会更新lastIndex属性,表示上次匹配到的最后索引:
var s = 'JavaScript, VBScript, JScript and ECMAScript';
var re=/[a-zA-Z]+Script/g;
// 使用全局匹配:
re.exec(s); // ['JavaScript']
re.lastI // 10
re.exec(s); // ['VBScript']
re.lastI // 20
re.exec(s); // ['JScript']
re.lastI // 29
re.exec(s); // ['ECMAScript']
re.lastI // 44
re.exec(s); // null,直到结束仍没有匹配到
全局匹配类似搜索,因此不能使用/^...$/,那样只会最多匹配一次。
正则表达式还可以指定i标志,表示忽略大小写,m标志,表示执行多行匹配。
正则表达式非常强大,要在短短的一节里讲完是不可能的。要讲清楚正则的所有内容,可以写一本厚厚的书了。如果你经常遇到正则表达式的问题,你可能需要一本正则表达式的参考书。
请尝试写一个验证Email地址的正则表达式。版本一应该可以验证出类似的Email:
'use strict';
var re = /^$/;
success = true,
should_pass = ['', 'bill.', 'tom@voyager.org', ''],
should_fail = ['', 'bill@microsoft', 'bill%', '@voyager.org'];
for (i = 0; i & should_pass. i++) {
if (!re.test(should_pass[i])) {
alert('测试失败: ' + should_pass[i]);
for (i = 0; i & should_fail. i++) {
if (re.test(should_fail[i])) {
alert('测试失败: ' + should_fail[i]);
if (success) {
alert('测试通过!');
版本二可以验证并提取出带名字的Email地址:
'use strict';
var re = /^$/;
var r = re.exec('&Tom Paris& tom@voyager.org');
if (r === null || r.toString() !== ['&Tom Paris& tom@voyager.org', 'Tom Paris', 'tom@voyager.org'].toString()) {
alert('测试失败!');
alert('测试成功!');
Make a Comment
Sign In to Make a Comment
You can sign in directly without register:
You need authorize to allow connect to your social passport for the first time.
WARNING: You are using an old browser that does not support HTML5.
Please choose a modern browser ( /
/ ) to get a good experience.当前位置:
> 谈谈正则表达式的使用
谈谈正则表达式的使用
一、前言:
Javascript里的正则表达式是用来检索字符串里是否包含某个特殊的字符串或者字符等,javascript正则表达式里面包括两种模式( RegExp 和 //)和模式检索三种方法( compile(), exec(), test())以及支持正则表达式的string对象的四种方法( search(), match(), replace(), split()), RegExp和//模式最大的不同就是RegExp可以传变量,而//模式不可以,只会将//里面的字符解释成字符串。
现在重点总结下这两种模式的和三种检索方法以及四种支持正则表达式的string对象的方法的使用。
二、RegExp模式:
当您检索某个字符串的时候,可以使用一种模式来描叙需要检索的内容。RegExp就是这种模式,RegExp通过new来创建模式new RegExp(pattern,attributes)有两个参数,参数pattern可以是一个字符串也可以是一个变量,指定了正则表达式的模式或者其他正则表达式。参数 attributes是一个可选的字符串包含属性“g”、“i”、“m”分别用于指定全局匹配、区分大小写匹配和多行匹配。RegExp实例如下:
*以变量为参数匹配
*匹配一个字符串里是否以某个变量开头的函数
*param:需要匹配的模式,字符串里需要匹配的内容
*string:需要匹配的字符串
*^匹配一个字符串里以什么字符串开头的。
function RegExpVarFun (param,string){
var reg = new RegExp('^'+param,'g'),
result = reg.test(string);
console.log(result);
*以字符串为参数匹配
*匹配一个字符串里是否以某个字符串开头的函数
*string:需要匹配的字符串
*^匹配一个字符串里以什么字符串开头的。
function RegExpStrFun (string){
var reg = new RegExp('^ab','g'),
result = reg.test(string);
console.log(result);
$(function(){
RegExpVarFun('ab','abdgdgdgdgdg')//输出结果是true
RegExpVarFun('ab','gsgssabggs')//输出结果是false
RegExpStrFun('abdgdgdgdgdg')//输出结果是true
RegExpStrFun('gsgssabggs')//输出结果是false
三、//模式:
Javascript正则表达式除了上面介绍的RegExp模式以外,还有一种模式就是//这个模式只能传字符,不能是变量。通常是通过/pattern/attributes形式创建,参数pattern是一个字符串,指定正则表达式的模式,参数attributes同RegExp模式里的参数attributes一样的意思。//模式实例如下:
*以字符串为参数匹配
*匹配一个字符串里是否以某个变量开头的函数
*string:需要匹配的字符串
*^匹配一个字符串里以什么字符串开头的。
function RegFun (string){
var reg = /^abc/g,
result = reg.test(string);
console.log(result);
$(function(){
RegFun ('abcdgdgdgdgdg');//输出结果是true
RegFun ('gsgssabggs');//输出结果是false
四、RegRxp对象方法:
1、compile()方法:在脚本执行过程中编译正则表达式,也可以用于改变和重新编译正则表达式。compile(pattern,attributes);
compile()函数没有返回值(或者说返回值为undefined)。
compile()函数将pattern转换为内部的格式,从而执行得更快。
例如,这允许在循环中更有效地使用正则表达式。当重复使用相同的表达式时,编译过的正则表达式使执行加速。然而,如果正则表达式发生更改,则这种编译毫无益处。实例如下:
*改变一个模式调用compile()方法
function compileFun (){
var str = 'This is BOBO! This is WBOBO!',
patt = /BOBO/g,
str2 = str.replace(patt,'敲代码的怪蜀黍');
console.log(str2); //输出结果是This is 敲代码的怪蜀黍! This is W敲代码的怪蜀黍!
patt = /(W)?BOBO/g;
pile(patt);
str2 = str.replace(patt,'敲代码的怪蜀黍');
console.log(str2); //输出结果是This is 敲代码的怪蜀黍! This is 敲代码的怪蜀黍!
$(function(){
compileFun ();
2、exec()方法:语法格式为RegExp.exec(str); 该方法使用创建RegExp对象实例时所指定的表达式模式对一个字符串进行搜索,并返回一个包含搜索结果的数组。
如果为正则表达式设置了全局标志(g),可以通过多次调用exec()方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。
如果没有设置全局标志(g),则exec()方法忽略RegExp对象的lastIndex属性值,从字符串的起始位置开始搜索。 返回的数组与调用方法 String.match() 返回的数组是相同的。
如果exec方法没有找到匹配,返回值为null;如果找到匹配,则返回一个数组,并更新RegExp对象中有关静态属性以反映匹配情况。返回数组中的元素0包含了完整的匹配结果,而元素1~n依次是表达式模式中定义的各个子匹配的结果。
exec方法返回的数组有3个属性,分别是input、index和lastIndex。
2.1) input属性是整个被搜索的字符串。
2.2) index属性是指匹配在整个被搜索字符串中的位置。
2.3) lastIndex属性是指匹配的子字符串的最后一个字符的下一个字符位置。
实例如下:
*exec()方法的调用,全局调用g
function execGlobalFun (){
var str = 'Visit yuanbo88, yuanbo88 is a place to study web technology',
patt = new RegExp('yuanbo88','g'),
while((result = patt.exec(str)) != null){
console.log(result);
console.log(patt.lastIndex);
//输出结果是:
//["yuanbo88", index: 6, input: "Visit yuanbo88, yuanbo88 is a place to study web technology"]
//["yuanbo88", index: 16, input: "Visit yuanbo88, yuanbo88 is a place to study web technology"]
*exec()方法的调用,没有全局g,
function execPartFun(){
var str = 'Visit yuanbo88, yuanbo88 is a place to study web technology',
patt = new RegExp('yuanbo88');
console.log(patt.exec(str)); //["yuanbo88", index: 6, input: "Visit yuanbo88 ,yuanbo88 is a place to study web technology"]
console.log(patt.lastIndex); //0
*exec()方法的调用,str匹配不到RegExp,
function execNullFun(){
var str = 'Visit , is a place to study web technology',
patt = new RegExp('yuanbo88','g');
console.log(patt.exec(str)); //null
console.log(patt.lastIndex); //0
$(function(){
execGlobalFun();
execPartFun();
execNullFun();
3、test()方法:语法格式为RegExp.test(str)。该方法检查一个字符串中是否存在创建RegExp对象实例时所指定的表达式模式,如果存在就返回True,否则返回False。如果找到匹配项,则会更新RegExp对象中的有关静态属性,以反映匹配情况。实例如下:
*test()方法的用法
*匹配一个字符串里是否含有bo
*string:需要匹配的字符串
function testFun (string){
var patt = new RegExp('bo','g'),
result = patt .test(string);
console.log(result);
$(function(){
testFun ('Visit yuanbo88,yuanbo88 is a place'); //输出结果是true
testFun ('Visit '); //输出结果是false
五、支持正则表达式的string方法
1、search()方法: 语法是str.search(RegExp),用来检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。总是返回字符串第一个与RegExp相匹配的子串的起始位置。如果没有找到任何匹配的子串则返回-1。
search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
search() 方法进行字符串检索时,对大小写敏感,所以RegExp进行匹配的时候要设置i是否区分大小写。实例如下:
*search()方法的调用
*检索字符串里是否含有bo,区分大小写
*string:需要匹配的字符串
function searchCapsLockFun (string){
var patt = new RegExp('bo'),
result = string.search(patt);
console.log(result);
*search()方法的调用
*检索字符串里是否含有bo,不区分大小写
*string:需要匹配的字符串
function searchFun (string){
var patt = new RegExp('bo','i'),
result = string.search(patt);
console.log(result);
$(function(){
searchCapsLockFun ('Visit yuanbo,yuanbo is a place')//输出结果是10
searchCapsLockFun ('Visit yuanBO,yuanBO is a place')//输出结果是-1
searchCapsLockFun ('Visit ')//输出结果是-1
searchFun('Visit yuanbo,yuanbo is a place')//输出结果是10
searchFun('Visit yuanBO,yuanBO is a place')//输出结果是10
searchFun('Visit ')//输出结果是-1
2、match()方法: 语法是str.match(searchvalue),str.match(RegExp)。
match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。该方法类似indexOf()和lastIndexOf(),但是它返回指定的值,而不是字符串的位置。存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。
如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。实例如下:
*match()方法的调用
*分别传入RegExp和字符串的区别,以及是否有全局g的区别
function matchFun (){
var str = "Visit 1,bo 2 a 3 bo",
result = str.match(/bo/g),//设置全局g匹配str是否含有 bo
result2 = str.match(/bo/),//匹配str是否含有 bo没有全局匹配
result3 = str.match("bo"),//匹配str是否含有 bo
result4 = str.match(/\d+/g),//全局匹配str的所有数字
result5 = str.match(/\d+/);//匹配str的所有数字,没有全局匹配
console.log(result);//输出结果["bo", "bo"]
console.log(result2);//输出结果["bo", index: 8, input: "Visit 1,bo 2 a 3 bo"]
console.log(result3);//输出结果["bo", index: 8, input: "Visit 1,bo 2 a 3 bo"]
console.log(result4);//输出结果["1", "2", "3"]
console.log(result5);//输出结果["1", index: 6, input: "Visit 1,bo 2 a 3 bo"]
$(function(){
matchFun();
3、replace()方法: 语法是str.replace(RegExp/substr,repalcement)。
RegExp/substr表示替换的模式和要替换的文本,replacement表示取代的新文本或者新函数。
replace()方法可用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。字符串 str的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。实例如下:
*replace()方法的调用
*分别传入RegExp和字符串的区别,以及是否有全局g的区别
function replaceFun (){
var str = "This is BOBO! This is WBOBO!",
result = str.replace(/BOBO/g,'敲代码的怪蜀黍'), //设置全局g匹配RegExp模式替换
result2 = str.replace(/BOBO/,'敲代码的怪蜀黍'); //RegExp模式替换,没有全局g匹配
console.log(result); //输出结果 'This is 敲代码的怪蜀黍! This is W敲代码的怪蜀黍!'
console.log(result2); //输出结果 'This is 敲代码的怪蜀黍! This is WBOBO!'
$(function(){
replaceFun ();
4、split()方法: 语法是str.replace(RegExp/substr,howmany)。
RegExp/substr正则表达式或者字符串,从这个位置开始切割,howmany指定数组返回的最大长度,可选的。
split()方法将字符切割成数组,实例如下:
*split()方法的调用
*将字符串切割成数组
function splitFun(){
var str = "This is BOBO! This is WBOBO!",
result = str.split(/\s+/g);//用RegExp模式匹配空字符串,以空字符串切割
console.log(result);//输出结果 ["This", "is", "BOBO!", "This", "is", "WBOBO!"]
$(function(){
splitFun();
本站欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明: 文章转载自:园博吧资源网正则替换与RegExp对象的用法
相信大家应该都有做过这样的题目。就是把一个数字转成每三个数字就用逗号隔开的问题。如,就转成100,000,000这样。相信方法有很多种。但是今天介绍一种用正则替换来实现的方法。顺便解释下RegExp对象的作用。JavaScript RegExp 对象&&RegExp 对象用于规定在文本中检索的内容。RegExp 是javascript中的一个内置对象。为正则表达式。var regExp =&&/[a-z]+/;&&这种写法就相当于下面这种写法。 var regExp = new RegExp(&[a-z]+&);所以第一种写法就等于声明了一个RegExp对象。RegExp 对象的方法RegExp 对象有 3 个方法:test()、exec() 以及 compile()。test()test() 方法检索字符串中的指定值。返回值是 true 或 false。exec()exec() 方法检索字符串中的指定值。返回值是被找到的值。如果没有发现匹配,则返回 null。compile()compile() 方法用于改变 RegExp。compile() 既可以改变检索模式,也可以添加或删除第二个参数。RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个 子匹配(以括号为标志)字符串,以此类推,RegExp.$2,RegExp.$3,..RegExp.$99总共可以有99个匹配给你看了例子就知道了HTML 代码var r= /^(\d{4})-(\d{1,2})-(\d{1,2})$/; //正则表达式 匹配出生日期(简单匹配)
r.exec('');
s1=RegExp.$1;
s2=RegExp.$2;
s3=RegExp.$3;
alert(s1+& &+s2+& &+s3)//结果为上面的代码已经很清晰地说明了。RegExp.$1就代表子匹配出来的第一个字符串,注意,这里是用()来包住你希望获取到的值,每组括号就是一个$+数字,顺序的话就按左括号的出现顺序来排的。因此嵌套的括号就不要问我到底是$几了。 因此上面那个问题就很好解决了。代码如下HTML 代码function
formatNum(num)
if(!/^(\+|-)?(\d+)(\.\d+)?$/.test(num)){alert(&wrong!&);}
//那个正则就相当与new了一个RegExp对象
RegExp.$1,
RegExp.$2,
RegExp.$3;
//第一为是+-号,第二位是整数部分。第三位是小数部分
RegExp().compile(&(\\d)(\\d{3})(,|$)&);
//这里的,和$是为了后面作准备的。就是说只要匹配到的前面有一位数字,然后后面还跟着三个数字($是直接匹配到最后,而逗号的话是代表在后续循环中已经添加的逗号)
while(re.test(b))
b.replace(re,
&$1,$2$3&);
//这里的while循环的意思是一直匹配看有没有满足条件的,有的话就继续替换循环下去,直到匹配不到这种类型的正则表达式时,停止。提示一下,这里第一个匹配到的就是字符串的最后。所以算下来的话,其实是从后面开始匹配的。
//避免变成数字相加。所以中间加入&&
}上面的注释我写得很清楚了,不知道各位看官有没有看懂。我再讲解讲解,按照上面的逻辑的来转化数字的过程是这样的,每次循环后,数字的变化过程如下。进入方法前如果是,首先变成之后变成100,000,000最后就直接跳出循环了。输出数据了。这样的话,就比较好理解为什么上面用 (,|$) 了吧?RegExp().compile:我想再解释下这个方法。其实这个方法就是相当于把之前的RegExp对象的值替换成另外一个正则表达式而已。以下举个例子HTML 代码var str = &abc12456def45646ghi&;
var regExp = new RegExp(&[a-z]+&);
document.writeln( regExp.exec(str) ); // abc
// 更改regExp的正则表达式模式,并进行编译
// 这与下列语句的作用是相同的:regExp = /\d+/;
pile(&\\d+&);
document.writeln( regExp.exec(str) ); // 12456上面的例子已经足够说明问题了。我就不多说了。我还做了以下的两个实验。HTML 代码var str = &abc12456def45646ghi&;
var regExp =/([a-z]+)/;
regExp.test(str);
alert( RegExp.$1 ); 这个输出什么?答案是abcHTML 代码var str = &abc12456def45646ghi&;
var regExp =/([a-z]+)/;
regExp.test(str);
var regExp1 = /(\d)/;
regExp1.test(str);
alert( RegExp.$1 ); 这个会输出什么?答案是1这两个例子就说明了RegExp对象只能在代码的运行中,会随时的被后续的正则表达式替换,但是在编码的时候最好还是使用complie方法来改变RegExp的值。这里在讲一下replace方法,很多人只是拿它来替换某些字符串,但是却很少人使用正则表达式去替换,很多时候正则表达式去替换会减少很多的代码。下面是这个方法的介绍。replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。stringObject.replace(regexp,replacement)regexp 必需。规定了要替换的模式的 RegExp 对象。请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。 replacement 必需。一个字符串值。规定了替换文本或生成替换文本的函数。 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。$1、$2、...、$99 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 最后再丢个replace的例子出来,例子比什么语言描述都会直观。例子在本例中,我们将把 &Doe, John& 转换为 &John Doe& 的形式:HTML 代码name = &Doe, John&;
name.replace(/(\w+)\s*, \s*(\w+)/, &$2 $1&);
10 总笔记数
1.4万 总阅读量
Copyright &
All Rights Reserved.
合作伙伴:}

我要回帖

更多关于 致单纯的小美好百度云 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信