`
romejiang
  • 浏览: 96667 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

深入浅出正则表达式

阅读更多

 

ps:这里是以javascript的正则表达式为蓝本。 创建:
一个文本格式或正则表达式构造函数
文本格式: /pattern/flags
正则表达式构造函数: new RegExp("pattern"[,"flags"]);
参数说明:
pattern -- 一个正则表达式文本
flags -- 如果存在,将是以下值:
g: 全局匹配
i: 忽略大小写
gi: 以上组合

()可以取得匹配的值
在最后加上$的意思是匹配到最后,后面什么都没有了
在前面加上^的意思是匹配到最前面,前面什么都没有了
\w\W之类的定义符只能匹配一个字符,后面一般都带有+,*,{n},{n,m}
group,0匹配的是全局的字符串,从1往后匹配每个()里的字符串

用法一:

var  pattern =   new  RegExp( " "([a-zA-Z0-9.]+)" " , " ig " );
result 
=  pattern.exec(content);


用法二:

String.replace( / / g,  "" );


如果使用String.replace(/\n/g, ""); 必须使用//作为pattern的标志,否则replace会认为是字符串,只做第一次替换。


正则表达式对象的属性及方法
   预定义的正则表达式拥有有以下静态属性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以预设置。其他属性的值在执行过exec或test方法后被根据不同条件赋 以不同的值。许多属性同时拥有长和短(perl风格)的两个名字,并且,这两个名字指向同一个值。(JavaScript模拟perl的正则表达式)
正则表达式对象的属性

属性 含义
$1...$9 如果它(们)存在,是匹配到的子串
$_ 参见input
$* 参见multiline
$& 参见lastMatch
$+ 参见lastParen
$` 参见leftContext
$'          参见rightContext
constructor    创建一个对象的一个特殊的函数原型
global       是否在整个串中匹配(bool型)
ignoreCase     匹配时是否忽略大小写(bool型)
input        被匹配的串
lastIndex     最后一次匹配的索引
lastParen     最后一个括号括起来的子串
leftContext    最近一次匹配以左的子串
multiline     是否进行多行匹配(bool型)
prototype     允许附加属性给对象
rightContext    最近一次匹配以右的子串
source       正则表达式模式
lastIndex     最后一次匹配的索引


正则表达式对象的方法
方法 含义
compile      正则表达式比较
exec        执行查找
test        进行匹配
toSource      返回特定对象的定义(literal representing),其值可用来创建一个新的对象。重载Object.toSource方法得到的。
toString      返回特定对象的串。重载Object.toString方法得到的。
valueOf      返回特定对象的原始值。重载Object.valueOf方法得到


构造 匹配于 字符     字符类 预定义的字符类
   
* 0次--多次
1--多次
0--1
{n} n次
{n,m} n次到m次
x 字符 x
\\ 反斜线字符
\0 n 八进制值的字符0 n (0 <= n <= 7)
\0 nn 八进制值的字符 0 nn (0 <= n <= 7)
\0 mnn 八进制值的字符0mnn 0 mnn (0 <= m <= 3, 0 <= n <= 7)
\x hh 十六进制值的字符0x hh
\u hhhh 十六进制值的字符0x hhhh
\t 制表符('\u0009' )
\n 换行符 ('\u000A' )
\r 回车符 ('\u000D' )
\f 换页符 ('\u000C' )
\a 响铃符 ('\u0007' )
\e 转义符 ('\u001B' )
\c x T对应于x的控制字符 x
[abc] a , b , or c (简单类)
[^abc] 除了a b c 之外的任意 字符(求反)
[a-zA-Z] a z A Z ,包含(范围)
[a-z-[bc]] a z ,除了b c [ad-z] (减去)
[a-z-[m-p]] a z ,除了m p [a-lq-z]
[a-z-[^def]] d , e , 或 f
. 任意字符(也许能与行终止符匹配,也许不能)
\d 数字: [0-9]
\D 非数字: [^0-9]
\s 空格符: [ \t\n\x0B\f\r]
\S 非空格符: [^\s]
\w 单词字符: [a-zA-Z_0-9]
\W 非单词字符: [^\w]


常用的匹配表达式

匹配中文字符的正则表达式: [\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 + ) / // 匹配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,''))"

分享到:
评论

相关推荐

    深入浅出正则表达式(CHM)加测试工具

    《深入浅出正则表达式》是一本专为学习正则表达式设计的资源集合,包含了一本详尽的教程(以CHM格式提供)以及一个实用的测试工具。正则表达式,简称正则,是计算机科学中用于模式匹配和文本搜索的一种强大语言。...

    深入浅出正则表达式 java

    《深入浅出正则表达式 java》是一份专注于讲解Java平台下正则表达式使用的教程。正则表达式,简称正则,是处理文本的强大工具,广泛应用于数据验证、搜索替换、文本分析等多个领域。在Java中,正则表达式通过`java....

    深入浅出正则表达式(一)

    ### 正则表达式的深入浅出解析 #### 一、正则表达式的概念与起源 正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,它能够帮助我们在大量的文本数据中查找符合特定模式的字符串。...

    深入浅出正则表达式.doc

    ### 正则表达式核心知识点解析 #### 一、正则表达式的定义与应用场景 **定义**:正则表达式(Regular Expression),简称 Regex 或 RegEx,是一种强大的文本模式匹配工具,广泛应用于文本搜索和替换操作中。它可以...

    深入浅出之正则表达式(二)

    深入浅出之正则表达式(二)是正则表达式系列教程的第二部分,旨在帮助初学者理解和掌握正则表达式的高级概念。本篇主要介绍了以下几个知识点: 1. **单词边界元字符**:`\b` 是一种特殊元字符,用于匹配单词的边界...

    深入浅出正则表达式 介绍正则表达式的好东西

    ### 正则表达式的深入浅出解析 #### 一、正则表达式的概念与起源 正则表达式(Regular Expression,简称regex或regexp),是一种强大的文本处理工具,它能够帮助我们在大量的文本数据中快速地找到想要的信息。正则...

    java深入浅出正则表达式.pdf

    ### Java深入浅出正则表达式 #### 一、引言 正则表达式(Regular Expression),也称为regex或regexp,是一种强大的文本处理工具,在文本搜索、文本替换等操作中有着广泛的应用。Java中的正则表达式功能强大且灵活...

    正则表达式正则表达式

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它们通过一套预定义的规则和特殊字符,即元字符,来构建模式,以识别特定的字符串序列。正则表达式广泛应用于编程语言、文本编辑器、脚本...

    深入浅出之正则表达式(一)

    深入浅出之正则表达式(一)搜 “深入浅出之正则表达式(二)”会找到第二部分

    深入浅出之正则表达式(一)

    在深入学习正则表达式之前,我们需要了解其基本概念和工作原理。 1. **什么是正则表达式** 正则表达式(Regular Expression,简称Regex)是一种模式匹配语言,用于描述一组文本字符串的特征。例如,"cat" 这个正则...

Global site tag (gtag.js) - Google Analytics