JS正则表达式总结

文章目录

在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp对象,
也可以用JavaScript 1.2中的新添加的一个特殊语法来创建RegExp对象.就像字符串直接量被定义为包含在引号内的字符一样,
正则表达式直接量也被定义为包含在一对斜杠(/)之间的字符.所以,JavaScript可能会包含如下的代码:

var pattern = /s$/;

这行代码创建一个新的RegExp对象,并将它赋给变量parttern.这个特殊的RegExp对象和所有以字母”s”结尾的字符串都匹配.用RegExp()也可以定义
一个等价的正则表达式,代码如下:

var pattern = new RegExp("s$");

无论是用正则表达式直接量还是用构造函数RegExp(),创建一个RegExp对象都是比较容易的.较为困难的任务是用正则表达式语法来描述字符的模式.

正则表达式中的特殊字符

字符 含意
\ 做为转意,即通常在”\”后面的字符不按原来意义解释,如/b/匹配字符”b”,当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如”*”匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了”\”后,/a\*/将只匹配”a*”。
^ 匹配一个输入或一行的开头,/^a/匹配”an A”,而不匹配”An a”
$ 匹配一个输入或一行的结尾,/a$/匹配”An a”,而不匹配”an A”
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1…$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[\b] 匹配一个退格符
\b 匹配一个单词的边界
\B 匹配一个单词的非边界
\cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M
\d 匹配一个字数字符,/\d/ = /[0-9]/
\D 匹配一个非字数字符,/\D/ = /[^0-9]/
\n 匹配一个换行符
\r 匹配一个回车符
\s 匹配一个空白字符,包括\n,\r,\f,\t,\v等
\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/
\t 匹配一个制表符
\v 匹配一个重直制表符
\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配”$5.98″中的5,等于[a-zA-Z0-9]
\W 匹配一个不可以组成单词的字符,如[\W]匹配”$5.98″中的$,等于[^a-zA-Z0-9]。

JS正则表达式常用方法

exec 方法

用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组。

rgExp.exec(str)

参数

rgExp。必选项。包含正则表达式模式和可用标志的正则表达式对象。

str。必选项。要在其中执行查找的 String 对象或字符串文字。

说明:如果 exec 方法没有找到匹配,则它返回 null。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。

如果为正则表达式设置了全局标志,exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志,exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。

exec 方法返回的数组有三个属性,分别是 inputindex 和 lastIndexInput 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。

下面的例子举例说明了 exec 方法的用法:

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 + "\t" + arr);
  }
  else{
    alert("请使用 JScript 的更新版本");
  }
}

match 方法

使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回。

stringObj.match(rgExp)
function MatchDemo(){
   var r, re;         // 声明变量。
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/ig;      // 创建正则表达式模式。
   r = s.match(re);   // 尝试去匹配搜索字符串。
   return(r);         // 返回的数组包含了所有 "ain"                        // 出现的四个匹配。
}

search 方法

返回与正则表达式查找内容匹配的第一个子字符串的位置。

stringObj.search(rgExp)

参数

stringObj。必选项。要在其上进行查找的 String 对象或字符串文字。

rgExp。必选项。包含正则表达式模式和可用标志的正则表达式对象。

说明:search 方法指明是否存在相应的匹配。如果找到一个匹配,search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1。

示例

下面的示例演示了 search 方法的用法。

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);                 // 返回 Boolean 结果。
}

test 方法

返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。

rgexp.test(str)

参数

rgexp。必选项。包含正则表达式模式或可用标志的正则表达式对象。

str。必选项。要在其上测试查找的字符串。

说明:test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false

全局 RegExp 对象的属性不由 test 方法来修改。

示例

下面的例子举例说明了 test 方法的用法:

function TestDemo(re, s){
	var s1;                         // 声明变量。
	// 检查字符串是否存在正则表达式。
	if (re.test(s))                 // 测试是否存在。
  		s1 = " contains ";           // s 包含模式。
	else
		s1 = " does not contain ";   // s 不包含模式。
	return("'" + s + "'" + s1 + "'"+ re.source + "'");  // 返回字符串.
}

JS常用正则匹配(未验证)

//校验是否全由数字组成
var patrn=/^[0-9]{1,20}$/

//校验登录名:只能输入5-20个以字母开头、可带数字、"_"、"."的字串
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;

//校验用户姓名:只能输入1-30个以字母开头的字串
var patrn=/^[a-zA-Z]{1,30}$/;

//校验密码:只能输入6-20个字母、数字、下划线
var patrn=/^(\w){6,20}$/;

//校验普通电话、传真号码:可以"+"开头,除数字外,可含有"-"
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;

//校验手机号码:必须以数字开头,除数字外,可含有"-"
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;

//校验邮政编码
var patrn=/^[a-zA-Z0-9]{3,12}$/;

^\\d+$  //非负整数(正整数 + 0)
^[0-9]*[1-9][0-9]*$  //正整数
^((-\\d+)|(0+))$  //非正整数(负整数 + 0)
^-[0-9]*[1-9][0-9]*$  //负整数
^-?\\d+$    //整数
^\\d+(\\.\\d+)?$  //非负浮点数(正浮点数 + 0)
^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //正浮点数
^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$  //非正浮点数(负浮点数 + 0)
^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //负浮点数
^(-?\\d+)(\\.\\d+)?$  //浮点数
^[A-Za-z]+$  //由26个英文字母组成的字符串
^[A-Z]+$  //由26个英文字母的大写组成的字符串
^[a-z]+$  //由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //由数字和26个英文字母组成的字符串
^\\w+$  //由数字、26个英文字母或者下划线组成的字符串
^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$    //email地址
^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$  //url
^[A-Za-z0-9_]*$
原文链接:,转发请注明来源!

发表评论