正则表达式基本用法A
2007-03-24 14:01
176 查看
?---表示紧贴其前的元素项是可选的。应用如下:abc?能匹配abc和ab。如果要匹配多个字符,那么就要用括号将之括起来。应用如下:a(bc)?能和a和abc匹配。/d{5}(-/d{5})?----它表示15252-12345或15252这样的匹配。
()---表示子匹配,字匹配按照从左到右的顺序一次存储在缓冲区,该过程称之为捕获。应用如下:
/1...../n----它表示从第一个到第n个捕获。(/d)(/d)/1/2它表示2525这样的表示。
Regexp对象-----
隐式声明采用: re = /pattern/[flags] 显示声明采用 re = new RegExp("pattern",["flags"])
Pattern
必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。
flags参数:
g:全局标志,有了它就能对全文进行匹配,否则只匹配最先出现的内容
i:忽略大小写
m:多行标志,没有有这个标志,那么^匹配开始位置,$匹配结束位置。有则搜索/n与/r之后的位置。
使用/的时候,当为显示声明应为////。但是隐式声明为//。
Regexp对象的属性
静态属性
index:是当前表达式模式首次匹配内容的开始位置,从零开始,其初始值为-1,每一次匹配其值都会发生改变。
input:返回当前作用的字符串,可以简写为$_,初始值为空字符串
lastIndex:首次成功匹配的字符的下一个位置,从零开始,基本作为下一次搜索的位置,初始值为-1,成功匹配后其值也发生改变。
lastMatch:当前匹配的最后一个字符串,可以简写为$&,初始值为空字符串,每一次匹配其值都会发生改变。
lastParen:最后一个子匹配,可以简写为$+,初始值为空字符串,每一次匹配其值都会发生改变。
leftContext:当前匹配的最后一个字符串左边的所有内容,可以简写为$`(esc下的字符),初始值为空字符串,每一次匹配其值都会发生改变
rightContext:当前匹配的最后一个字符串右边的所有内容,可以简写为$‘(esc下的字符),初始值为空字符串,每一次匹配其值都会发生改变
$1...$9:九个子匹配,Regexp对象只能记录最后九个。
实例属性:
global:(g)全局标志,有了它就能对全文进行匹配,否则只匹配最先出现的内容
ignorceCase:(i)忽略大小写
multiLine:(m)多行标志,没有有这个标志,那么^匹配开始位置,$匹配结束位置。有则搜索/n与/r之后的位置。
source:返回对象的文本字符串。
test()方法:是否匹配,匹配返回true,否则反之。应用如下:
<html>
<head>
<title>创建正则表达式 </title>
<script language = "JavaScript">
var myString="这是第一个正则表达式的例子";
var myregex = new RegExp("一个"); // 创建正则表达式
if (myregex.test(myString)){
alert("找到了指定的模式!");
}
else{
alert("未找到指定的模式。");
}
</script>
</head><body></body>
</html>
exec()
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
rgExp.exec(str)
参数
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
str
必选项。要在其中执行查找的 String 对象或字符串文字。
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。
exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。
<script language="javascript">
var strSrc = "xxa1b01c001yya2b02c002zz";
var re = /a(/d)b(/d{2})c(/d{3})/gi;
var arr, count = 0;
while ((arr = re.exec(strSrc)) != null)
{
displayResult();
}
function displayResult()
{
document.write("<p>这是用正则表达式/" + re.source + "/gi对字符串<br>/""
+ RegExp.input + "/"进行第" + (++count) + "次搜索的结果:<br>");
document.write("RegExp.index为" + RegExp.index + "<br>");
document.write("RegExp.lastIndex为" + RegExp.lastIndex + "<br>");
document.write("RegExp.lastMatch为" + RegExp.lastMatch + "<br>");
document.write("RegExp.lastParen为" + RegExp.lastParen + "<br>");
document.write("RegExp.leftContext为" + RegExp.leftContext + "<br>");
document.write("RegExp.rightContext为" + RegExp.rightContext + "<br>");
document.write("RegExp.$1为" + RegExp.$1 + "<br>");
document.write("RegExp.$2为" + RegExp.$2 + "<br>");
document.write("RegExp.$3为" + RegExp.$3 + "<br>");
document.write("RegExp.$4为" + RegExp.$4 + "<br>");
document.write("arr.index为" + arr.index + "<br>");
document.write("arr.input为" + arr.input + "<br>");
document.write("arr.lastIndex为" + arr.lastIndex + "<br>");
document.write("返回数组的元素个数为" + arr.length + "<br>");
document.write("返回数组的内容为[");
for(var i=0; i<arr.length; i++)
{
if(i < arr.length-1)
document.write("/"" + arr[i] + "/",");
else
document.write("/"" + arr[i] + "/"]</p>");
}
}
</script>
compile("pattern",["flags"])
更换正则对象的表达式模式,并将新的模式指定为内部模式,从而使匹配的过程执行更快。
A->B->A当出现这样的方式后最好用以上的方法。
()---表示子匹配,字匹配按照从左到右的顺序一次存储在缓冲区,该过程称之为捕获。应用如下:
/1...../n----它表示从第一个到第n个捕获。(/d)(/d)/1/2它表示2525这样的表示。
Regexp对象-----
隐式声明采用: re = /pattern/[flags] 显示声明采用 re = new RegExp("pattern",["flags"])
Pattern
必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。
flags参数:
g:全局标志,有了它就能对全文进行匹配,否则只匹配最先出现的内容
i:忽略大小写
m:多行标志,没有有这个标志,那么^匹配开始位置,$匹配结束位置。有则搜索/n与/r之后的位置。
使用/的时候,当为显示声明应为////。但是隐式声明为//。
Regexp对象的属性
静态属性
index:是当前表达式模式首次匹配内容的开始位置,从零开始,其初始值为-1,每一次匹配其值都会发生改变。
input:返回当前作用的字符串,可以简写为$_,初始值为空字符串
lastIndex:首次成功匹配的字符的下一个位置,从零开始,基本作为下一次搜索的位置,初始值为-1,成功匹配后其值也发生改变。
lastMatch:当前匹配的最后一个字符串,可以简写为$&,初始值为空字符串,每一次匹配其值都会发生改变。
lastParen:最后一个子匹配,可以简写为$+,初始值为空字符串,每一次匹配其值都会发生改变。
leftContext:当前匹配的最后一个字符串左边的所有内容,可以简写为$`(esc下的字符),初始值为空字符串,每一次匹配其值都会发生改变
rightContext:当前匹配的最后一个字符串右边的所有内容,可以简写为$‘(esc下的字符),初始值为空字符串,每一次匹配其值都会发生改变
$1...$9:九个子匹配,Regexp对象只能记录最后九个。
实例属性:
global:(g)全局标志,有了它就能对全文进行匹配,否则只匹配最先出现的内容
ignorceCase:(i)忽略大小写
multiLine:(m)多行标志,没有有这个标志,那么^匹配开始位置,$匹配结束位置。有则搜索/n与/r之后的位置。
source:返回对象的文本字符串。
test()方法:是否匹配,匹配返回true,否则反之。应用如下:
<html>
<head>
<title>创建正则表达式 </title>
<script language = "JavaScript">
var myString="这是第一个正则表达式的例子";
var myregex = new RegExp("一个"); // 创建正则表达式
if (myregex.test(myString)){
alert("找到了指定的模式!");
}
else{
alert("未找到指定的模式。");
}
</script>
</head><body></body>
</html>
exec()
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。
rgExp.exec(str)
参数
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
str
必选项。要在其中执行查找的 String 对象或字符串文字。
如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。
如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。
exec 方法返回的数组有三个属性,分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。
<script language="javascript">
var strSrc = "xxa1b01c001yya2b02c002zz";
var re = /a(/d)b(/d{2})c(/d{3})/gi;
var arr, count = 0;
while ((arr = re.exec(strSrc)) != null)
{
displayResult();
}
function displayResult()
{
document.write("<p>这是用正则表达式/" + re.source + "/gi对字符串<br>/""
+ RegExp.input + "/"进行第" + (++count) + "次搜索的结果:<br>");
document.write("RegExp.index为" + RegExp.index + "<br>");
document.write("RegExp.lastIndex为" + RegExp.lastIndex + "<br>");
document.write("RegExp.lastMatch为" + RegExp.lastMatch + "<br>");
document.write("RegExp.lastParen为" + RegExp.lastParen + "<br>");
document.write("RegExp.leftContext为" + RegExp.leftContext + "<br>");
document.write("RegExp.rightContext为" + RegExp.rightContext + "<br>");
document.write("RegExp.$1为" + RegExp.$1 + "<br>");
document.write("RegExp.$2为" + RegExp.$2 + "<br>");
document.write("RegExp.$3为" + RegExp.$3 + "<br>");
document.write("RegExp.$4为" + RegExp.$4 + "<br>");
document.write("arr.index为" + arr.index + "<br>");
document.write("arr.input为" + arr.input + "<br>");
document.write("arr.lastIndex为" + arr.lastIndex + "<br>");
document.write("返回数组的元素个数为" + arr.length + "<br>");
document.write("返回数组的内容为[");
for(var i=0; i<arr.length; i++)
{
if(i < arr.length-1)
document.write("/"" + arr[i] + "/",");
else
document.write("/"" + arr[i] + "/"]</p>");
}
}
</script>
compile("pattern",["flags"])
更换正则对象的表达式模式,并将新的模式指定为内部模式,从而使匹配的过程执行更快。
A->B->A当出现这样的方式后最好用以上的方法。
相关文章推荐
- 正则表达式的基本用法说明
- 正则表达式基本用法C
- 正则表达式基本用法
- 正则表达式的基本用法(C#)
- coldfusion 条件表达式、循环基本用法
- Jquery——Day4(Ajax基本用法get/post/ajax/serialize等)
- Spring mvc中@RequestMapping 6个基本用法小结
- React 基本事件用法
- vscode中的插件Settings Sync(设置和插件同步)基本用法
- Re库基本用法
- 一站式学习Wireshark(一):Wireshark基本用法
- Android编程之绘图canvas基本用法示例
- dig 命令的基本用法
- pandas的基本用法(六)——合并数据
- matplotlib的基本用法(四)——设置legend图例
- 正则表达式教程之子表达式用法分析
- C#基本打印事件用法实例
- 学习JAVA正则表达式基本用法
- SiteMapPath基本用法
- WebView(原生)与Js 交互 基本与高级用法