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
+
)
/
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,''))"
分享到:
相关推荐
"深入浅出正则表达式"这个标题表明我们将探讨正则表达式的精髓,以易于理解的方式讲解其核心概念。描述中提到的“深入浅出”强调了教程的易懂性和实用性。 在正则表达式的世界里,一个基本的表达式可以描述一系列的...
《深入浅出正则表达式》是一本专为学习正则表达式设计的资源集合,包含了一本详尽的教程(以CHM格式提供)以及一个实用的测试工具。正则表达式,简称正则,是计算机科学中用于模式匹配和文本搜索的一种强大语言。...
《深入浅出正则表达式 java》是一份专注于讲解Java平台下正则表达式使用的教程。正则表达式,简称正则,是处理文本的强大工具,广泛应用于数据验证、搜索替换、文本分析等多个领域。在Java中,正则表达式通过`java....
### 正则表达式的深入浅出解析 #### 一、正则表达式的概念与起源 正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,它能够帮助我们在大量的文本数据中查找符合特定模式的字符串。...
### 正则表达式核心知识点解析 #### 一、正则表达式的定义与应用场景 **定义**:正则表达式(Regular Expression),简称 Regex 或 RegEx,是一种强大的文本模式匹配工具,广泛应用于文本搜索和替换操作中。它可以...
### 正则表达式详解 #### 一、正则表达式的定义与背景 正则表达式(Regular Expression),简称regex或regexp,是一种用于描述文本模式的强大工具。它可以帮助我们在文本中进行精确匹配、查找以及替换操作。正则...
深入浅出之正则表达式(二)是正则表达式系列教程的第二部分,旨在帮助初学者理解和掌握正则表达式的高级概念。本篇主要介绍了以下几个知识点: 1. **单词边界元字符**:`\b` 是一种特殊元字符,用于匹配单词的边界...
### 正则表达式的深入浅出解析 #### 一、正则表达式的概念与起源 正则表达式(Regular Expression,简称regex或regexp),是一种强大的文本处理工具,它能够帮助我们在大量的文本数据中快速地找到想要的信息。正则...
### Java深入浅出正则表达式 #### 一、引言 正则表达式(Regular Expression),也称为regex或regexp,是一种强大的文本处理工具,在文本搜索、文本替换等操作中有着广泛的应用。Java中的正则表达式功能强大且灵活...
元字符是正则表达式的基础,它们赋予正则表达式特殊的含义,让我们能够表达出更加复杂和精确的匹配需求。 在正则表达式的世界里,元字符是构建模式的基石。例如,点号`.`可以匹配除换行符之外的任意单个字符,这...
深入浅出之正则表达式(一)搜 “深入浅出之正则表达式(二)”会找到第二部分
理解并熟练运用这些正则表达式原理和技巧,可以帮助开发者编写出更高效、准确的正则表达式,从而更好地处理和操作文本数据。通过深入学习正则表达式,不仅可以提高工作效率,还能提升编程能力,是每个程序员不可或缺...
在深入学习正则表达式之前,我们需要了解其基本概念和工作原理。 1. **什么是正则表达式** 正则表达式(Regular Expression,简称Regex)是一种模式匹配语言,用于描述一组文本字符串的特征。例如,"cat" 这个正则...
### PHP正则表达式深入浅出 #### 一、什么是正则表达式 正则表达式(Regular Expression),简称regex或regexp,是一种用于匹配字符串中字符组合的强大工具。它可以用来执行复杂的文本处理任务,比如搜索、替换...