`

正则函数的使用

 
阅读更多
js正则函数match、exec、test、search、replace、split使用介绍集合,学习正则表达式的朋友可以参考下。





match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。
stringObj.match(rgExp)
参数
stringObj
必选项。对其进行查找的 String 对象或字符串文字。
rgExp
必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。
其余说明与exec一样,不同的是如果match的表达式匹配了全局标记g将出现所有匹配项,而不用循环,但所有匹配中不会包含子匹配项。
例子1:
function MatchDemo(){ var r, re; // 声明变量。 var s = "The rain in Spain falls mainly in the plain"; re = /(a)in/ig; // 创建正则表达式模式。 r = s.match(re); // 尝试去匹配搜索字符串。 document.write(r); // 返回的数组包含了所有 "ain" 出现的四个匹配,r[0]、r[1]、r[2]、r[3]。 // 但没有子匹配项a。}输出结果:ain,ain,ain,ain
exec 方法
用正则表达式模式在字符串中查找,并返回该查找结果的第一个值(数组),如果匹配失败,返回null。
rgExp.exec(str)
参数
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
str
必选项。要在其中执行查找的 String 对象或字符串文字。
返回数组包含:
input:整个被查找的字符串的值;
index:匹配结果所在的位置(位);
lastInput:下一次匹配结果的位置;
arr:结果值,arr[0]全匹配结果,arr[1,2...]为表达式内()的子匹配,由左至右为1,2...。
例子2:

复制代码 代码如下:


function RegExpTest(){
var src="http://sumsung753.blog.163.com/blog/I love you!";
var re = /\w+/g; // 注意g将全文匹配,不加将永远只返回第一个匹配。
var arr;
while((arr = re.exec(src)) !=null){ //exec使arr返回匹配的第一个,while循环一次将使re在g作用寻找下一个匹配。
document.write(arr.index + "-" + arr.lastIndex + ":" + arr + "<br/>");
for(key in arr){
document.write(key + "=>" + arr[key] + "<br/>");
}
document.write("<br/>");
}
}
window.onload = RegExpTest();


输出结果:
0-1:I //0为index,i所在位置,1为下一个匹配所在位置
input=>I love you!
index=>0
lastIndex=>1
0=>I
2-6:love
input=>I love you!
index=>2
lastIndex=>6
0=>love
7-10:you
input=>I love you!
index=>7
lastIndex=>10
0=>you
说明:根据手册,exec只返回匹配结果的第一个值,比如上例如果不用while循环,将只返回'I'(尽管i空格后的love和you都符合表达式),无论re表达式用不用全局标记g。但是如果为正则表达式设置了全局标记g,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。利用这个特点可以反复调用exec遍历所有匹配,等价于match具有g标志。
当然,如果正则表达式忘记用g,而又用循环(比如:while、for等),exec将每次都循环第一个,造成死循环。
exec的输出将包含子匹配项。
例子3:

复制代码 代码如下:


function execDemo(){
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain";
re = /[\w]*(ai)n/ig;
r = re.exec(s);
document.write(r + "<br/>");
for(key in r){
document.write(key + "-" + r[key] + "<br/>");
}
}
window.onload = execDemo();


输出:
rain,ai
input-The rain in Spain falls mainly in the plain
index-4
lastIndex-8
0-rain
1-ai
test 方法
返回一个 Boolean 值,它指出在被查找的字符串中是否匹配给出的正则表达式。
rgexp.test(str)
参数
rgexp
必选项。包含正则表达式模式或可用标志的正则表达式对象。
str
必选项。要在其上测试查找的字符串。
说明
test 方法检查字符串是否与给出的正则表达式模式相匹配,如果是则返回 true,否则就返回 false。
例子4:

复制代码 代码如下:


function TestDemo(re, s){
var s1;
if (re.test(s))
s1 = " 匹配正则式 ";
else
s1 = " 不匹配正则式 ";
return("'" + s + "'" + s1 + "'"+ re.source + "'");
}
window.onload = document.write(TestDemo(/ab/,'cdef'));


输出结果:'cdef' 不匹配正则式 'ab'
注意:test()继承正则表达式的lastIndex属性,表达式在匹配全局标志g的时候须注意。
例子5:

复制代码 代码如下:


function testDemo(){
var r, re; // 声明变量。
var s = "I";
re = /I/ig; // 创建正则表达式模式。
document.write(re.test(s) + "<br/>"); // 返回 Boolean 结果。
document.write(re.test(s) + "<br/>");
document.write(re.test(s));
}
testDemo();


输出结果:
true
false
true
当第二次调用test()的时候,lastIndex指向下一次匹配所在位置1,所以第二次匹配不成功,lastIndex重新指向0,等于第三次又重新匹配。下例显示test的lastIndex属性:
例子6:

复制代码 代码如下:


function testDemo(){
var r, re; // 声明变量。
var s = "I";
re = /I/ig; // 创建正则表达式模式。
document.write(re.test(s) + "<br/>"); // 返回 Boolean 结果。
document.write(re.lastIndex); // 返回 Boolean 结果。
}
testDemo();


输出:
true
1
解决方法:将test()的lastIndex属性每次重新指向0,re.lastIndex = 0;

search 方法
返回与正则表达式查找内容匹配的第一个子字符串的位置(偏移位)。
stringObj.search(rgExp)
参数
stringObj
必选项。要在其上进行查找的 String 对象或字符串文字。
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
说明:如果找到则返回子字符至开始处的偏移位,否则返回-1。
例子6:

复制代码 代码如下:


function SearchDemo(){
var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain.";
re = /falls/i; // 创建正则表达式模式。
re2 = /tom/i;
r = s.search(re); // 查找字符串。
r2 = s.search(re2);
return("r:" + r + ";r2:" + r2); // 返回 Boolean 结果。
}
document.write(SearchDemo());


输出:r:18;r2:-1
replace 方法
返回根据正则表达式进行文字替换后的字符串的复制。
stringObj.replace(rgExp, replaceText)
参数
stringObj
必选项。要执行该替换的 String 对象或字符串文字。该字符串不会被 replace 方法修改。
rgExp
必选项。为包含正则表达式模式或可用标志的正则表达式对象。也可以是 String 对象或文字。如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串转化为正则表达式。
replaceText
必选项。是一个String 对象或字符串文字,对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jscript 5.5 或更新版本中,replaceText 参数也可以是返回替换文本的函数。
说明
replace 方法的结果是一个完成了指定替换的 stringObj 对象的复制。意思为匹配的项进行指定替换,其它不变作为StringObj的原样返回。
ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。结果为将每一匹配的子字符串替换为函数调用的相应返回值的字符串值。函数作参可以进行更为复杂的操作。
例子7:

复制代码 代码如下:


function f2c(s) {
var test = /(\d+(\.\d*)?)F\b/g; // 说明华氏温度可能模式有:123F或123.4F。注意,这里用了g模式
return(s.replace
(test,
function(Regstr,$1,$2,$3,newstrObj) {
return(("<br/>" + Regstr +"<br/>" + ($1-32) * 1/2) + "C" +"<br/>" + //以下两行进行替换
$2 +"<br/>" + $3 +"<br/>" + newstrObj +"<br/>" );
}
)
);
}
document.write(f2c("Water: 32.2F and Oil: 20.30F."));


输出结果:
Water: //不与正则匹配的字符,按原字符输出
32.2F //与正则相匹配的第一个字符串的原字符串 Regstr
0.10000000000000142C //与正则相匹配的第一个字符串的第一个子模式匹配的替换结果 $1
.2 //与正则相匹配的第一个字符串的第二个子模式匹配项的替换结果,这里我们没有将它替换 $2
7 //与正则相匹配的第一个字符串的第一个子匹配出现的偏移量 $3
Water: 32.2F and Oil: 20.30F. //原字符串 newstrObj
and Oil: //不与正则匹配的字符
20.30F //与正则相匹配的第二个字符串的原字符串
-5.85C //与正则相匹配的第二个字符串的第一个子模式与匹配的替换结果
.30 //与正则相匹配的第二个字符串的第二个子模式匹配项的替换结果,这里我们没有将它替换
22 //与正则相匹配的第二个字符串的第一个子匹配出现的偏移量
Water: 32.2F and Oil: 20.30F. //原字符串
. //不与正则匹配的字符
上面的函数参数我们全部用到了。在实际中,我们只须用将xxF替换为xxC,根据要求,我们无须写这么多参数。
例子8:

复制代码 代码如下:


function f2c(s) {
var test = /(\d+(\.\d*)?)F\b/g; // 说明华氏温度可能模式有:123F或123.4F
return(s.replace
(test,
function(strObj,$1) {
return((($1-32) * 1/2) + "C");
}
)
);
}
document.write(f2c("Water: 32.2F and Oil: 20.30F."));


输出:Water: 0.10000000000000142C and Oil: -5.85C.
更多的应用:
例子9:

复制代码 代码如下:


function f2c(s) {
var test = /([\d]{4})-([\d]{1,2})-([\d]{1,2})/;
return(s.replace
(test,
function($0,$1,$2,$3) {
return($2 +"/" + $1);
}
)
);
}
document.write(f2c("today: 2011-03-29"));


输出:today: 03/2011
split 方法
将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
stringObj.split([separator[, limit]])
参数
stringObj
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit
可选项。该值用来限制返回数组中的元素个数。
说明
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。separator 不作为任何数组元素的部分返回。
例子10:

复制代码 代码如下:


function SplitDemo(){
var s, ss;
var s = "The rain in Spain falls mainly in the plain.";
// 正则表达式,用不分大不写的s进行分隔。
ss = s.split(/s/i);
return(ss);
}
document.write(SplitDemo());


输出:The rain in ,pain fall, mainly in the plain.

js正则表达式之exec()方法、match()方法以及search()方法

先看代码:

var sToMatch = "test, Tes, tst, tset, Test, Tesyt, sTes";
var reEs = /es/gi;
alert(reEs.exec(sToMatch));
alert(sToMatch.match(reEs));
alert(sToMatch.search(reEs));

三个弹出框内容如下:







结果分析如下:

1、RegExp的exec()方法,有一个字符串参数,返回一个数组,数组的第一个条目是第一个匹配;其他的是反向引用。所以第一个返回的结果是第一个匹配的值es(不区分大小写)。

2、String对象有一个match()方法,它返回一个包含在字符串中所有匹配的数据。这个方法调用string对象,同时传给它一个RegExp对象。所以第二个弹出语句返回的是所有符合正则表达式的数组。

3、search()的字符串方法与indexOf()有些类似,但是它使用一个RegExp对象而非仅仅一个子字符串。search()方法返回第一个匹配值的位置。所以第三处弹出的是“1”,即第二个字符就匹配了。注意的是search()方法不支持全局匹配正规表达式(带参数g)。
分享到:
评论

相关推荐

    正则函数匹配修改

    "正则函数匹配修改"这个练习题目旨在帮助初学者掌握正则表达式的使用方法,特别是针对用户、密码和路由等常见的匹配场景。 首先,我们需要了解PHP中的正则函数。最常用的两个函数是`preg_match()`和`preg_replace()...

    数据库正则函数.txt

    数据库正则函数.txt 数据库正则函数.txt 数据库正则函数.txt 数据库正则函数.txt

    表单验证 正则 函数封装

    表单验证 正则 函数封装 不会用的和本人联系

    大数据-算法-有界正则函数导数及系数估计.pdf

    《大数据-算法-有界正则函数导数及系数估计》是针对大数据处理与算法设计领域中一个关键问题的研究报告,主要关注有界正则函数的导数和系数的估算。该研究由西北工业大学的硕士研究生完成,深入探讨了有界正则函数的...

    正则函数提取图片地址

    类似的,其他编程语言如JavaScript、Java、C#等也有相应的正则函数供你使用。 总之,正则函数提取图片地址是一个常见的任务,通过理解和应用正则表达式,我们可以高效地从HTML文档中抽取图片资源的URL,这对于网站...

    gcv.rar_GCV正则化参数_正则化 matlab_正则化函数_正则化工具箱_正则参数

    在使用`gcv`函数时,你需要先定义正则化参数的集合,然后将其传递给函数,通常会结合其他函数如`lasso`或`ridge`来构建模型。例如: ```matlab lambda = logspace(-3, 3, 100); % 定义正则化参数范围 mdl = lasso(X...

    VC++支持中文的正则表达式函数库

    在本案例中,"VC++支持中文的正则表达式函数库" 提供了一个专门为VC++(Visual C++)设计的正则表达式库,尤其值得注意的是,它特别优化了对中文字符的支持。 这个库由一位大陆程序员编写并开源,作者为了促进技术...

    asp match正则函数使用Matchs实例

    然后,使用`Execute`方法执行正则表达式,并将结果存储在`Matches`集合中。接下来,通过`For Each`循环遍历`Matches`,获取每个`Match`对象,利用`FirstIndex`和`Value`属性构建返回的字符串,显示匹配的索引位置和...

    Oracle正则表达式函数全面解析

    本文将详细介绍Oracle数据库中支持的四个主要正则表达式函数:`REGEXP_LIKE`、`REGEXP_INSTR`、`REGEXP_SUBSTR`和`REGEXP_REPLACE`,以及如何使用POSIX正则表达式。 #### 二、Oracle正则表达式基础 ##### 1. POSIX...

    EXCEL正则表达式自定义函数

    本VBA模块是实现“正则表达式”功能的自定义函数模块,各自定义函数在公式向导窗口均有功能及参数说明,方便、易用;在VBA集成环境导入本模块文件后便可使用。

    大数据-算法-关于slice正则函数与强拟凸域的全纯自映射的研究王谢平.pdf

    综上所述,这篇学位论文“关于slice正则函数与强拟凸域的全纯自映射的研究”深入探讨了四元数和八元数环境下的slice正则函数理论,以及在强拟凸域上全纯自映射的边界行为。作者通过新的凸组合恒等式和Schwarz引理的...

    PostgreSQL 正则表达式 常用函数的总结

    - `regcomp` 和 `regerror` 等函数用于编译和获取正则表达式的错误信息,但通常情况下,PostgreSQL用户不需要直接使用这些函数。 PostgreSQL中的正则表达式使用了POSIX正则表达式的标准。这意味着大多数基本的正则...

    C语言在Visual Studio 2010环境下使用regex.h正则表达式函数库

    这将使我们能够使用`regcomp()`, `regexec()`, `regfree()`等函数来编译、执行和释放正则表达式。 4. **`regcomp()`函数** 此函数用于编译正则表达式模式。它接受一个正则表达式字符串,以及一些编译选项,返回一...

    正则表达式(regex)错误使用导致功能漏洞分析

    正则表达式具有极高的灵活性,可以使用多种方法实现相同的结果。然而,它的灵活性也带来了使用上的复杂性,错误的使用方式常常会导致功能漏洞的产生。 在使用正则表达式时,初学者往往会感到困扰,因为其涉及诸多元...

    C语言正则表达式库

    1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...

    mssql正则clr及函数,追加Group分组支持

    mssql2005以上版本,在数据库内实现正则函数,其中程序集 clr.regex 内容不可修改,该字符串为编译好的clr程序dll文件。 表值函数 RegexMatchesWithGroup RegexMatches 标量值函数 RegexIsMatch RegexMatch ...

    C语言正则表达式使用详解

    本文将详细介绍C语言中如何使用正则表达式,并通过具体的函数介绍和示例代码帮助读者更好地理解和运用这些技巧。 #### 二、C语言正则表达式常用函数 ##### 1. regcomp() **函数原型:** ```c int regcomp(regex_t ...

    SQL中使用正则替换的自定义函数

    1. 正则表达式的性能通常低于非正则函数,因此在大数据量操作时,应考虑优化查询或提前预处理数据。 2. 验证输入,避免恶意用户通过正则表达式执行SQL注入攻击。 3. 考虑函数的可移植性和兼容性,如果将来数据库迁移...

    C#正则函数用法实例【匹配、替换、提取】

    本文实例讲述了C#正则函数用法。分享给大家供大家参考,具体如下: System.Text.RegularExpressions 命名空间包含一些类,这些类提供对 .NET Framework 正则表达式引擎的访问。该命名空间提供正则表达式功能,可以从...

Global site tag (gtag.js) - Google Analytics