`
孤独舞者
  • 浏览: 88821 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

[ZT]Js:正则表达式常用匹配参考手册
字符描述:

  ^符号匹配字符串的开头。例如:
    ^abc 与“abc xyz”匹配,而不与“xyz abc”匹配

  $符号匹配字符串的结尾。例如:
    abc$ 与“xyz abc”匹配,而不与“abc xyz”匹配。
    注意:如果同时使用^符号和$符号,将进行精确匹配。例如:
       ^abc$ 只与“abc”匹配   

  *符号匹配0个或多个前面的字符。例如:
    ab* 可以匹配“ab”、“abb”、“abbb”等

  +符号匹配至少一个前面的字符。例如:
    ab+ 可以匹配“abb”、“abbb”、“ab”等。

  ?符号匹配0个或1个前面的字符。例如:
    ab?c? 可以且只能匹配“a”、“ab”、“ac”和“abc”

  .符号匹配除换行符以外的任何字符。例如:
    (.)+ 匹配除换行符以外的所有字符串

  x|y匹配“x”或“y”。例如:
    abc|xyz 可匹配 “abc”或 “xyz”,而“ab(c|x)yz”匹配 “abcyz”和“abxyz”

  {n}匹配恰好n次(n为非负整数)前面的字符。例如:
    a{2} 可以匹配“aa“,但不匹配“a”

  {n,}匹配至少n次(n为非负整数)前面的字符。例如:
    a{3,} 匹配“aaa”、“aaaa”等,但不匹配“a”和“aa”。
    注意:a{1,}等价于a+
       a{0,}等价于a*

  {m,n}匹配至少m个,至多n个前面的字符。例如:
    a{1,3} 只匹配“a”、“aa”和“aaa”。
    注意:a{0,1}等价于a?

  [xyz]表示一个字符集,匹配括号中字符的其中之一。例如:
    [abc] 匹配“a”、“b”和“c”

  [^xyz]表示一个否定的字符集。匹配不在此括号中的任何字符。例如:
    [^abc] 可以匹配除“a”、“b”和“c”之外的任何字符

  [a-z]表示某个范围内的字符,匹配指定区间内的任何字符。例如:
    [a-z] 匹配从“a”到“z”之间的任何一个小写字母字符

  [^m-n]表示某个范围之外的字符,匹配不在指定范围内的字符。例如:
    [m-n] 匹配除从“m”到“n”之间的任何字符

  \符号是转义操作符。例如:
    \n 换行符
    \f 分页符
    \r 回车
    \t 制表符
    \v 垂直制表符

    \\ 匹配“\”
    \/ 匹配“/”

    \s 任何白字符,包括空格、制表符、分页符等。等价于“[ \f\n\r\t\v]”
    \S 任何非空白的字符。等价于“^\f\n\r\t\v]”
    \w 任何单词字符,包括字母和下划线。等价于“[A-Za-z0-9_]”
    \W 任何非单词字符。等价于“[^A-Za-z0-9_]”

    \b匹配单词的结尾。例如:
      ve\b 匹配单词“love”等,但不匹配“very”、“even”等

    \B匹配单词的开头。例如:
      ve\B 匹配单词“very”等,但不匹配“love”等

    \d匹配一个数字字符,等价于[0-9]。例如:
      abc\dxyz 匹配“abc2xyz”、“abc4xyz”等,但不匹配“abcaxyz”、“abc-xyz”等

    \D匹配一个非数字字符,等价于[^0-9]。例如:
      abc\Dxyz 匹配“abcaxyz”、“abc-xyz”等,但不匹配“abc2xyz”、“abc4xyz”等

    \NUM匹配NUM个(其中NUM为一个正整数),引用回到记住的匹配。例如:
      (.)\1 匹配两个连续相同的字符。

    \oNUM匹配n(其中n为一个小于256的八进制换码值)。例如:
      \o011 匹配制表符

    \xNUM匹配NUM(其中NUM为一个小于256的十六进制换码值)。例如:
      \x41 匹配字符“A”


=========================================================
=========================================================


匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下:

String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}

利用正则表达式分解和转换IP地址:

下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:

function IP2V(ip)
{
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式
if(re.test(ip))
{
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
}
else
{
throw new Error("Not a valid IP address!")
}
}

不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:

var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复]

var s="abacabefgeeii"
var s1=s.replace(/(.).*\1/g,"$1")
var re=new RegExp("["+s1+"]","g")
var s2=s.replace(re,"")
alert(s1+s2) //结果为:abcefgi

我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。

得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1

s="http://www.9499.net/page1.htm"
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
alert(s)

利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"





==========================================================
==========================================================


JScript中正则表达函数的说明与应用 




作为模式匹配下文本替换、搜索、提取的强有力工具,正则表达式(Regular Expression)的应用已经从unix平台逐渐渗入到网络开发中了,作为服务器端/客户端的脚本开发语言JScript,正越来越多将正则表达式应用融入其中,以弥补自身在文本上处理能力的不足。在此,我们以JScript5.5版本为例,对其中的正则表达式的应用作一个概述。
首先我们需要区分JScript中关于正则表达式的两个对象:Regular Expression对象和RegExp对象。
前者仅包含一个特定的正则表达式实例的信息,而后者通过一个全局变量的属性来反映最近模式匹配的特性。
前者在匹配前需要指定匹配模式,即创建一个Regular Expression对象的实例,而后可以把它传递给一个字符串方法,或是把一个字符串作为参数传递给这个Regular Expression实例的方法;而后者无需创建,它是一个固有的全局对象,每次成功匹配操作结果信息被保存在这个对象的属性中。

 

一、RegExp对象的属性:反应最近一次成功匹配的结果信息

input  :保存执行匹配的字符串(被搜索的目标字符串)(>=IE4)
index  :保存匹配的首字符的位置*>=IE4)
lastIndex :保存匹配的字符串的下一个字符的位置(>=IE4)
lastMatch($&) :保存匹配到的字符串(>=IE5.5)
lastParen($+) :保存匹配结果最后一个子匹配的内容(最后一个括号的匹配内容)(>=IE5.5)
leftContext($`) :保存目标字符串中匹配子字符串前的所有字符 (>=IE5.5)
rightContext($'):保存目标字符串中匹配子字符串后的所有字符 (>=IE5.5)
$1 - $9  :保存匹配中最开始的9个子匹配(即最开始的9个括号内的匹配结果)(>=IE4)

 

二、Regular Expression对象简介


1.Regular Expression对象定义
在脚本中使用正则表达式模式匹配,首先腰设定匹配模式,方法有如下两种
(1)rgExp=/pattern*/[flags*]
(2)rgExp=new RegExp("pattern",["flags"])
注意:
a.后者模式中的转义字符“\”需要用“\\”表示,用以抵消JS中转义字符"\"的意义,否则JS首先作为自己的转义概念来解释"\"后的字符。
b.flags标识有以下几个(至JScript 5.5版本)
  g:设定当前匹配为全局模式
  i:忽略匹配中的大小写检测
  m:多行搜索模式
2.Regular Expression对象属性
(1)rgExp.lastIndex:匹配结果后面一个字符的位置,同RegExp.lastIndex
(2)rgExp.source:reExp对象的正则表达式匹配模式
3.Regular Expression对象方法
(1)rgExp.compile(pattern,[flags])
将rgExp转化为内部格式,以加快匹配的执行,这对于大量模式一致的匹配更有效
(2)rgExp.exec(str)
按照rgExp的匹配模式对str字符串进行匹配查找,当rgExp对象中设定了全局搜索模式(g),则匹配查找从RegExp对象lastIndex属性所指定的目标字符串位置开始;若没有设置全局搜索,则从目标字符串第一个字符开始搜索。若没有任何匹配发生,返回null。
需要注意的是该方法将匹配结果放在一个数组内返回,该数组有三个属性
input:包含目标字符串,同RegExp.index
index:匹配到的子字符串在目标字符串中的位置,同RegExp.index
lastIndex:匹配到的子字符串后面一个字符的位置,同RegExp.lastIndex
(3)rgExp.test(str)
返回布尔值来反映被查找的目标字符串str中是否存在符合匹配的模式。该方法不改变RegExp的属性
4.与正则表达式相关的方法
主要是指字符串对象中应用模式匹配的方法
(1)stringObj.match(rgExp)
根据rgExp对象的正则表达式模式查找字符串stringObj中的匹配字符项,将结果以数组形式返回。该数组有三个属性值,与exec方法返回的数组属性相同。若没有任何匹配,返回null。
需要注意的是,若rgExp对象未设定全局匹配模式,则数组0下标元素为匹配的整体内容,1~9包含了子匹配得到的字符。若设定了全局模式,则数组包含了搜索到的所有整体匹配项。
(2)stringObj.replace(rgExp, replaceText)
返回一个字符串,即将stringObj中符合rgExp模式匹配的字符串替换成replaceText后返回。需要注意的是stringObj本身并不因为替换操作而改变。若期望stringObj中所有符合正则表达式模式的字符串被替换,则在建立正则表达式模式时要设定为全局模式。
(3)stringObj.search(rgExp)
返回第一个匹配到的子字符串的位置

符号名词解释:
位置:表示子字符串与目标字符串首字符的偏移
reExp:表示一个Regular Expression对象实例
stringObj:表示一个字符串对象
pattern:正则表达式模式
flags:匹配操作的模式标识

在实际web程序开发中我们可以有针对性的使用正则表达式来达到我们字符串处理的要求
如下附上四个使用正则表达式的JScript例程,这些例子主要用来熟悉正则表达式的使用。

1.email地址有效性检测
<script language='JScript'>
function validateEmail(emailStr)
{
var re=/^[\w.-]+@([0-9a-z][\w-]+\.)+[a-z]{2,3}$/i;
//或 var re=new RegExp("^[\\w.-]+@([0-9a-z][\\w-]+\\.)+[a-z]{2,3}$","i");
if(re.test(emailStr))
{
  alert("有效email地址!");
  return true;
}
else
{
  alert("无效email地址!");
  return false;
}
}
</script>

2.字符串替换操作
<script language='JScript'>
var r, pattern, re;
var s = "The rain in Spain falls mainly in the plain falls.";
pattern = /falls/ig;
re = s.replace(re,'falling');
alert('s = ' + s + '\n' + 're = ' + re);
</script>

3.模式查找字符串
<script language='JScript'>
var index, pattern;
var str = "four for fall fell fallen fallsing fall falls waterfalls ";
pattern = /\bfalls\b/i;
index = str.search(pattern);
alert('The position of match is at ' + index);
</script>

3.正则表达式属性例程
<script language='JScript'>
function matchAttrib()
{
   var s='';
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBbdbsbdbdz";
   while((arr = re.exec(str))!=null)
   {
    s += "=======================================<br>";
    s += "$1 returns: " + RegExp.$1 + "<br>";
    s += "$2 returns: " + RegExp.$2 + "<br>";
    s += "$3 returns: " + RegExp.$3 + "<br>";
    s += "input returns : " + RegExp.input + "<br>";
    s += "index returns : " + RegExp.index + "<br>";
    s += "lastIndex returns : " + RegExp.lastIndex + "<br>";
    s += "lastMatch returns: " + RegExp.lastMatch + "<br>";
    s += "leftContext returns: " + RegExp.leftContext + "<br>";
    s += "rightContext returns: " + RegExp.rightContext + "<br>";
    s += "lastParen returns: " + RegExp.lastParen + "<br>";
    s += "arr.index returns: " + arr.index + "<br>";
    s += "arr.lastIndex returns: " + arr.lastIndex + "<br>";
    s += "arr.input returns: " + arr.input + "<br>";
    s += "re.lastIndex returns: " + re.lastIndex + "<br>";
    s += "re.source returns: " + re.source + "<br>";
   }
   return(s);                            //Return results.
}
document.write(matchAttrib());
</script>

分享到:
评论

相关推荐

    JavaScript正则表达式

    JavaScript正则表达式 一、认识正则表达式 1、正则表达式是描述字符模式的对象,正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。 2、String和RegExp都定义了使用正则表达式进行强大...

    javascript正则表达式基础篇

    JavaScript的正则表达式功能非常强大,通过使用正则表达式,我们可以轻松地执行各种复杂的字符串操作。 ### 正则表达式的书写方法 在JavaScript中,创建正则表达式主要有两种方法: 1. 使用斜杠(/)来定义正则...

    JS正则表达式验证端口范围(0-65535)

    javascript正则表达式验证IP地址的端口合法性 if (!(/^[1-9]\d*$/.test(port) && 1 &lt;= 1 * port && 1 * port &lt;= 65535)){ return false } 提示文案: 您的端口不符合范围:0-65535 PS:下面看下JavaScript...

    JS正则表达式验证数字(非常全)

    正则表达式(Regular Expression),是一种文本模式的描述方法,它提供了一种在字符串中进行搜索、替换、匹配等操作的方式,而JS正则表达式是正则表达式在JavaScript语言中的实现。在软件开发中,正则表达式被广泛...

    JS 正则表达式从地址中提取省市县

    JavaScript正则表达式提供了一种高效的方式来进行这类字符串的匹配和提取工作。 在上述提供的实例中,使用了正则表达式来匹配地址字符串中出现的行政区划名称。具体来说,实例代码中构建了一个正则表达式变量`...

    JS正则表达式 验证邮箱登入 分析

    js正则表达式 验证邮箱登入 #emailError { color: red; } [removed] = function() { /* 分析: 0.给提交按钮绑定时间 1.先获取 用户输入框的值 2.写正则表达式 3.用正则表达式...

    JS正则表达式必须包含数字、字母、特殊字符

    在JavaScript中,正则表达式通过特定的语法和方法被广泛应用于各种文本操作任务。在某些情况下,我们需要构建正则表达式来确保用户输入的数据符合特定的安全或格式要求。比如,当用户需要输入密码或者复杂的用户名时...

    2019手机号码JS正则表达式验证实例代码

    概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一...前端的正则表达式验证往往是最繁多最复杂的,所以整理了一些最近自己常用的正则表达式,希望能对大家

    javascript正则表达式迷你书 (1).pdf

    JavaScript 正则表达式迷你书 本书是 JavaScript 正则表达式的入门级教程,旨在帮助读者快速掌握正则表达式的基本概念和应用。下面是本书的知识点摘要: 第一章:正则表达式字符匹配攻略 * 两种模糊匹配:横向...

    JavaScript正则表达式校验非零的正整数实例

    本文分享了JavaScript正则表达式(^[1-9]d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^+?[1-9][0-9]*$)校验非零的正整数实例代码,代码简单易懂,需要的朋友可以看下

    JavaScript正则表达式替换字符串中图片地址(img src)的方法

    本篇文章将深入探讨如何使用JavaScript正则表达式来实现这个功能。 首先,我们需要理解JavaScript的`String.prototype.replace()`方法。此方法接受两个参数:一个正则表达式或字符串作为查找的模式,以及一个替换...

    JS正则表达式获取字符串中特定字符的方法

    在JavaScript中,正则表达式是一种强大且灵活的文本处理工具,它可以用来搜索、匹配和操作字符串。本文将介绍如何使用正则表达式结合replace方法的回调函数功能来获取字符串中特定字符。这一技能在处理字符串数据时...

    js正则表达式(姓名、证件号码)

    js正则表达式,按甲方(银行)提供的个人证件信息采集规则编写的对应正则表达式

    用户名、密码等15个常用的js正则表达式

    给大家收集整理了用户名和密码等15个常用的js正则表达式,需要的朋友参考下吧

    深入理解JS正则表达式—分组

    之前写了一篇关于正则新手入门的文章,本以为对正则表达式相对比较了解 但是今天我又遇到了一个坑,可能是自己不够细心的原因吧,今天就着重和大家分享一下javascript正则表达式中的分组。如果你对JS正则表达式不够...

    JavaScript正则表达式验证登录实例

    JavaScript正则表达式是JavaScript编程语言中一种用来进行模式匹配和文本处理的强大工具。本文所讲的JavaScript正则表达式验证登录实例,主要介绍了如何利用JavaScript中的正则表达式来进行登录时账号和密码的格式...

    js正则表达式验证密码强度【推荐】

    本文详细介绍了如何使用JavaScript语言结合正则表达式来验证密码强度,并通过实例代码的形式对这一技术进行了演示。通过本文的介绍,我们可以了解到如何通过编写正则表达式,根据不同的密码规则来判断密码强度,并...

    JavaScript正则表达式验证代码(推荐)

    RegExp:是正则表达式(regular expression)的简写。 正则表达式描述了字符的模式对象。可以使用正则表达式来描述要检索的内容。 简单的模式可以是一个单独的字符。更复杂的模式包括了更多的字符,并可用于解析、...

    jq非空验证,js正则表达式验证邮箱和手机号码

    JavaScript正则表达式是用于匹配字符串模式的强大工具。在验证邮箱和手机号码时,我们需要创建符合特定规则的正则表达式。对于邮箱验证,通常的正则表达式如下: ```javascript var emailRegex = /^[a-zA-Z0-9._%...

Global site tag (gtag.js) - Google Analytics