正则表达式是一种可以用于模式匹配和替换的强有力的工具。替换文本,可以在文档
中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。
基本语法
/love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。
出现的次数
“+” 规定其前导字符必须在目标对象中连续出现一次或多次。
“*” 规定其前导字符必须在目标对象中出现零次或连续多次。
“?” 规定其前导字符必须必须在目标对象中连续出现零次或一次。
如:/fo+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “fool”,“fo”,
或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。
/eg*/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “easy”,“ego”,
或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。
/Wil?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “Win”,或者
“Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。
{n} n是一个非负整数。匹配确定的 n 次。
{n,} n是一个非负整数。至少匹配 n 次
{n,m} m和n均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
如:/jim {2,6}/ 规定字符m可以在匹配对象中连续出现2-6次
注意:以上特殊符号匹配的是紧挨着该符号前的单个字符。
字符匹配
\s:用于匹配单个空格符,包括tab键和换行符;
\S:用于匹配除单个空格符之外的所有字符;
\d:用于匹配从0到9的数字;
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
. :用于匹配除换行符之外的所有字符。
定位符
“^” 定位符规定匹配模式必须出现在目标字符串的开头
“$” 定位符规定匹配模式必须出现在目标对象的结尾
“\b” 定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一
“\B” 定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内, 即匹配对象既
不能作为目标字符串的开头,也不能作为目标字符串的结尾。
注意:当“^”出现在 “[]”内时就被视做否定运算符;而当“^”位于“[]”之外,或没有“[]”时,
则应当被视做定位符。
如:/^hell/ 可以与目标对象中以 “hell”, “hello”或“hellhound”开头的字符串相匹配。
/ar$/ 可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。
/\bbom/ 可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。
/man\b/ 可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。
范围
/[A-Z]/ 与从A到Z范围内任何一个大写字母相匹配。
/[a-z]/ 与从a到z范围内任何一个小写字母相匹配。
/[0-9]/ 与从0到9范围内任何一个数字相匹配。
如: /([a-z][A-Z][0-9])+/ 与任何由字母和数字组成的字符串,可以与“aB0”等相匹配。
“()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中
“|”:类似编程逻辑中的“或”运算
“\”:转义符。
使用实例
在JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配
操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相应的返回true或false。
我们可以使用JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。
<script language="Javascript1.2">
function verifyAddress(obj) {
var email = obj.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if(flag)
{ alert(“Your email address is correct!”);
return true;
}else
{ alert(“Please try again!”);
return false;
}
}
</script>
正则表达式对象
语法 1 re = /pattern/[flags]
语法 2 re = new RegExp("pattern",["flags"])
参数
re 必选项。将要赋值为正则表达式模式的变量名。
Pattern 必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。
如果用语法 2,用引号将模式引起来。
Flags 可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用。
g(全文查找出现的所有 pattern)
i(忽略大小写)
m (多行查找)
search 方法
返回与正则表达式查找内容匹配的第一个子字符串的位置。 stringObj.search(rgExp)
参数
stringObj 必选项。要在其上进行查找的 String 对象或字符串文字。
rgExp 必选项。包含正则表达式模式和可用标志的正则表达式对象。
说明
search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,
指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。
示例
function SearchDemo()
{ var r, re; // 声明变量。
var s = "The rain in Spain falls mainly in the plain.";
re = /falls/i; // 创建正则表达式模式。
r = s.search(re); // 查找字符串。 return(r);}
返回值:18
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 属性中包含了匹
配中最后一个字符的下一个位置。
示例
function RegExpTest() {
var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
if (ver >= 5.5){ // 测试 JScript 的版本。
var src = "The rain in Spain falls mainly in the plain.";
var re = /\w+/g; // 创建正则表达式模式。
var arr;
while ((arr = re.exec(src)) != null)
document.write(arr.index + "-" + arr.lastIndex + arr + "\t");
} else{ alert("请使用 JScript 的更新版本"); }
}
返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain
test 方法
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。rgexp.test(str)
参数
rgexp 必选项。包含正则表达式模式或可用标志的正则表达式对象。
str 必选项。要在其上测试查找的字符串。
说明
test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
全局 RegExp 对象的属性不由 test 方法来修改。
示例
function TestDemo(re, s)
{ var s1;
if (re.test(s)) s1 = " contains ";
else s1 = " does not contain "; return("'" + s + "'" + s1 + "'"+ re.source + "'");
}
match 方法
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。stringObj.match(rgExp)
参数
stringObj 必选项。对其进行查找的 String 对象或字符串文字。
rgExp 必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式
和可用标志的变量名或字符串文字。
说明
如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的
属性以反映匹配结果。match 方法返回的数组有三个属性:input、index 和 lastIndex。Input 属性包
含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex属
性包含了最后一次匹配中最后一个字符的下一个位置。如果没有设置全局标志 (g),数组的 0 元素包含
整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的exec
方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。
示例
function MatchDemo() {
var r, re;
var s = "The rain in Spain falls mainly in the plain";
re = /ain/i; // 创建正则表达式模式。
r = s.match(re); // 尝试匹配搜索字符串。
return(r); // 返回第一次出现 "ain" 的地方。 }
返回值:ain
示例
function MatchDemo() { var r, re;
var s = "The rain in Spain falls mainly in the plain";
re = /ain/ig; //带i和g标志
r = s.match(re); // 尝试去匹配搜索字符串。
return(r); // 返回的数组包含了所有 "ain" // 出现的四个匹配。 }
返回值:ain,ain,ain,ain
var r, re = "Spain"; r = "The rain in Spain".replace(re, "Canada"); return r;
返回值:The rain in Canada
9128

被折叠的 条评论
为什么被折叠?



