正则表达式练习

正则表达式面试题目整理
正则表达式面试题目整理
1)题目:写出正则表达式,从一个字符串中提取链接地址。比如下面字符串中"IT面试题博客中包含很多& &a href=& 微软面试题 &/a& "则需要提取的地址为 "
我自己写的答案是:http(s)?://([\w]+\.)+\w+(/\w+)*
在Regex Tester测试通过了,后边看了作者提供的答案,
python中:
p = re.compile('&a(?: [^&]*)+href=([^ &]*)(?: [^&]*)*&')
content = "IT面试题博客中包含很多 &a href=/mianshiti/blog/category/微软面试题& 微软面试题 &/a& "p.search(content).groups()
我看不懂,但只拿表达式&a(?: [^&]*)+href=([^ &]*)(?: [^&]*)*&
在Regex Tester运行的结果是包含了&a href&。这个真不知道是python特有的还是表达式漏了什么。
2)题目:验证电子邮箱地址。
\w+([-.]\w+)*@\w+([-.]\w+)*
参考别人的,
"\w+”所代表的就是任何字母与数字所组成的非空字符串(non-null string)。(\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*;)*&\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
在《精通正则表达式-基于.NET/ASP/PHP...》沙金编著
他的正则表达式:\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
感觉我写的最好记忆,这些都能通过的,我的@前后表达式一样的
在网易注册邮箱时,@符号前的内容有限制:
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分860 积分26307阅读权限100帖子精华可用积分26307 信誉积分4079 专家积分105 在线时间12489 小时注册时间最后登录
帖子主题精华可用积分26307 信誉积分4079 专家积分105 在线时间12489 小时注册时间最后登录
认证徽章论坛徽章:99
获奖名单已公布:
作为专业码农或者票友码农,不知各位是否有这样的体会:
回想我们写过的 Shell/Perl/Python/Ruby/PHP/C#/Java 等各种语言、各种脚本,其实很多时候都是在处理字符串。
而正则表达式正式处理字符串的神兵利器。
当我们没有学会正则表达式的时候,往往是七拐八绕、费尽九牛二虎之力、写了一大段代码才能实现某个功能。
但是网上的大牛们信手给出一行正则表达式,轻松、高效、优雅的就把问题搞定了。
为了帮助更多的人掌握正则表达式,为了帮助更多的人体验那种 Duang 的一下解决难题的酷爽,为了帮助更多的人变成下图中的高手,于是就有了本期的话题讨论活动。
14:21 上传
正则表达式返回了了预期结果的时候
本期话题:
1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。
2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?
3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这些工具有哪些优势?
4、看过几本正则表达式的书籍之后,如何在实际工作中学以致用、融会贯通?
活动时间:
本期奖品:
最精彩回复奖 4 名,可获《正则表达式必知必会(第2版)(修订版)》图书一本
来自 Shell_HAT 的友情提示,这本书的作者和译者都不是我,我只是帮忙组织此次活动。
图书简介:
14:20 上传
作者: (美)Ben Forta& &
译者: 杨涛
出版社:人民邮电出版社
上架时间:
出版日期:2015 年1月
开本:32开
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分12314阅读权限90帖子精华可用积分12314 信誉积分1635 专家积分0 在线时间3080 小时注册时间最后登录
大富大贵, 积分 12314, 距离下一级还需 7686 积分
求职 : 帖子主题精华可用积分12314 信誉积分1635 专家积分0 在线时间3080 小时注册时间最后登录
认证徽章论坛徽章:77
本帖最后由 zsszss0000 于
14:37 编辑
是不是沙发吗?有木有?
我了个去,果然沙发!
北冥有鱼,其名为鲲。鲲之大,不知其几千里也。
化而为鸟,其名为鹏。鹏之背,不知其几千里也,怒而飞,其翼若垂天之云。
UID空间积分0 积分3948阅读权限100帖子精华可用积分3948 信誉积分2883 专家积分15 在线时间4080 小时注册时间最后登录
帖子主题精华可用积分3948 信誉积分2883 专家积分15 在线时间4080 小时注册时间最后登录
论坛徽章:3
血顶帽子哥
UID空间积分0 积分134阅读权限10帖子精华可用积分134 信誉积分98 专家积分0 在线时间142 小时注册时间最后登录
白手起家, 积分 134, 距离下一级还需 66 积分
帖子主题精华可用积分134 信誉积分98 专家积分0 在线时间142 小时注册时间最后登录
论坛徽章:0
点位,学习一下,等着领书。
学习一点,进步一点
UID7649289空间积分0 积分2668阅读权限50帖子精华可用积分2668 信誉积分2263 专家积分20 在线时间3572 小时注册时间最后登录
小富即安, 积分 2668, 距离下一级还需 2332 积分
帖子主题精华可用积分2668 信誉积分2263 专家积分20 在线时间3572 小时注册时间最后登录
认证徽章论坛徽章:9
本帖最后由 HH106 于
15:02 编辑
1、初学者怎样快速掌握正则表达式?请结合实际经验,分享自己当初学习时遇到的困难和解决方法。
说下个人的学习,先看下相关的正则表达式代码和其表示的意义,像&&正则表达式30分钟入门教程&&,&&正则表达式必知必会&&这样的书,不需要全部记住,大致了解下就行,遇到不懂的就上网查,网上大把的资料。
2、初学者经常会问:好不容易学会一点正则表达式,怎么 grep/sed/Shell/Perl 等各个命令和脚本里面的用法好像都不一样呀!如何帮助初学者解决这个困惑?
保存了一张表,表上有相关的grep/sed/Shell/Perl 等各个命令的正则差异,遇到不同的时候就查查表,网上有这张表,
关键字&各种工具之正则表达式语法比较&
3、在阅读正则表达式的书籍的同时,哪些在线或者离线的工具可以帮助初学者做练习?这些工具有哪些优势?
Regex Match Tracer
REGEXBUDDY&&
The Regulator
推荐REGEXBUDDY
4、看过几本正则表达式的书籍之后,如何在实际工作中学以致用、融会贯通?
多使用,多测试
总评分:&可用积分 + 5&
Linux centos 2.6.18-92.el5
UID空间积分0 积分9485阅读权限100帖子精华可用积分9485 信誉积分2885 专家积分40 在线时间3549 小时注册时间最后登录
帖子主题精华可用积分9485 信誉积分2885 专家积分40 在线时间3549 小时注册时间最后登录
论坛徽章:14
这本书我有第一版的,比较实用。参考书。
Grow up ,never grow old
UID空间积分0 积分5029阅读权限100帖子精华可用积分5029 信誉积分3042 专家积分0 在线时间2109 小时注册时间最后登录
帖子主题精华可用积分5029 信誉积分3042 专家积分0 在线时间2109 小时注册时间最后登录
认证徽章论坛徽章:78
没沙发就不顶了吗?也得顶啊!
UID空间积分0 积分1169阅读权限30帖子精华可用积分1169 信誉积分864 专家积分0 在线时间926 小时注册时间最后登录
家境小康, 积分 1169, 距离下一级还需 831 积分
帖子主题精华可用积分1169 信誉积分864 专家积分0 在线时间926 小时注册时间最后登录
认证徽章论坛徽章:1
每次到用的时候就去google,没有系统的仔细的学习过,大致懂点 ,顶版主
UID250618空间积分0 积分64阅读权限10帖子精华可用积分64 信誉积分386 专家积分0 在线时间111 小时注册时间最后登录
白手起家, 积分 64, 距离下一级还需 136 积分
帖子主题精华可用积分64 信誉积分386 专家积分0 在线时间111 小时注册时间最后登录
论坛徽章:0
自带干粮顶帽子哥
UID空间积分0 积分1670阅读权限30帖子精华可用积分1670 信誉积分1173 专家积分0 在线时间1415 小时注册时间最后登录
家境小康, 积分 1670, 距离下一级还需 330 积分
帖子主题精华可用积分1670 信誉积分1173 专家积分0 在线时间1415 小时注册时间最后登录
认证徽章论坛徽章:9
gif图出自什么电影啊开源中国在线工具
在线正则表达式测试
正则表达式
忽略大小写
匹配结果:
替换结果:
在此填写您的意见信息:
Email邮箱: (必填)
您的建议和意见:第十三章 正则表达式 这部分内容可以说是学习shell脚本之前必学的内容。如果你这部分内容学的越好,那么你的shell脚本编写能力就会越强。所以不要嫌这部分内容啰嗦,也不要怕麻烦,要用心学习。一定要多加练习,练习多了就能熟练掌握了。
在计算机科学中,正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,抑或查询某个日志文件分析其内容,都会用到正则表达式。
其实正则表达式,只是一种思想,一种表示方法。只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串。常用的工具有grep, sed, awk 等,下面笔者就介绍一下这三种工具的使用方法。
【grep / egrep】
笔者在前面的内容中多次提到并用到grep命令,可见它的重要性。所以好好学习一下这个重要的命令吧。你要知道的是grep连同下面讲的sed, awk都是针对文本的行才操作的。
语法: grep
[-cinvABC]
-c :打印符合要求的行数
-i :忽略大小写
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行
-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
以下,笔者举几个小例子帮助你好好掌握这个grep工具的用法。
a. 过滤出带有某个关键词的行并输出行号
b. 过滤不带有某个关键词的行,并输出行号
c. 过滤出所有包含数字的行
在前面也提到过这个”[ ]”的应用,如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字符之外的字符。
这就表示筛选包含oo字符串,但是不包含r字符。
d. 过滤出文档中以某个字符开头或者以某个字符结尾的行
在正则表达式中,”^”表示行的开始,”$”表示行的结尾,那么空行则表示”^$”,如果你只想筛选出非空行,则可以使用 “grep
filename”得到你想要的结果。现在想一下,如何打印出不以英文字母开头的行呢?
e. 过滤任意一个字符与重复字符
“.”表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来。
“*”表示零个或多个前面的字符。
‘ooo*’ 表示oo, ooo, oooo … 或者更多的’o’。现在你是否想到了’.*’ 这个组合表示什么意义?
‘.*’表示零个或多个任意字符,空行也包含在内。
f. 指定要过滤字符出现的次数
这里用到了{ },其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o 即’oo’的行。注意,{ }左右都需要加上脱意字符’\’。另外,使用{ }我们还可以表示一个范围的,具体格式是 ‘\{n1,n2\}’其中n1&n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。
上面部分讲的grep,另外笔者常常用到egrep这个工具,简单点讲,后者是前者的扩展版本,我们可以用egrep完成grep不能完成的工作,当然了grep能完成的egrep完全可以完成。如果你嫌麻烦,egrep了解一下即可,因为grep的功能已经足够可以胜任你的日常工作了。下面笔者介绍egrep不用于grep的几个用法。为了试验方便,笔者把test.txt 编辑成如下内容:
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a. 筛选一个或一个以上前面的字符
和grep 不同的是,egrep这里是使用’+’的。
b. 筛选零个或一个前面的字符
c. 筛选字符串1或者字符串2
中间有一个’|’表示或者的意思,笔者用这个用的很多,所以这个你最好记一下。
egrep中’( )’的应用
用’( )’表示一个整体,例如(oo)+就表示1个’oo’或者多个’oo’
【sed 工具的使用】
grep 工具的功能其实还不够强大,其实说白了,grep实现的只是查找功能,而它却不能实现把查找的内容替换掉。以前用vim的时候,可以查找也可以替换,但是只局限于在文本内部来操作,而不能输出到屏幕上。sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上的功能了,而且还有其他更丰富的功能。sed和awk都是流式编辑器,是针对文档的行来操作的。
a. 打印某行
sed -n ‘n’p filename 单引号内的n是一个数字,表示第几行
b. 打印多行
打印整个文档用 -n ‘1,$’p
c. 打印包含某个字符串的行
上面grep中使用的特殊字符,如’^’, ‘$’, ‘.’, ‘*’等同样也能在sed中使用。
d. -e 可以实现多个行为
e. 删除某行或者多行
‘d’ 这个字符就是删除的动作了,不仅可以删除指定的单行以及多行,而且还可以删除匹配某个字符的行,另外还可以删除从某一行一直到文档末行。
f. 替换字符或字符串
上例中的’s’就是替换的命令,’g’为本行中全局替换,如果不加’g’,只换该行中出现的第一个。
除了可以使用’/’外,还可以使用其他特殊字符例如’#’或者’@’都没有问题。
现在思考一下,如何删除文档中的所有数字或者字母?
有意思吧,[0-9]表示任意的数字。这里你也可以写成[a-zA-Z]甚至[0-9a-zA-Z]
g. 调换两个字符串的位置
这个就需要解释一下了,上例中用’()’把所想要替换的字符括起来成为一个整体,因为括号在sed中属于特殊符号,所以需要在前面加脱意字符’\’,替换时则写成’\1’, ‘\2’, ‘\3’ 的形式。除了调换两个字符串的位置外,笔者还常常用到在某一行前或者后增加指定内容。
h. 直接修改文件的内容
sed -i ‘s/:/#/g’
test.txt ,这样就可以直接更改test.txt文件中的内容了。由于这个命令可以直接把文件修改,所以在修改前最好先复制一下文件以免改错。
sed常用到的也就上面这些了,只要你多加练习就能熟悉它了。为了能让你更加牢固的掌握sed的应用,笔者留几个练习题给你,希望你能认真完成。
1. 把/etc/passwd 复制到/root/test.txt,用sed打印所有行;
2. 打印test.txt的3到10行;
3. 打印test.txt 中包含’root’的行;
4. 删除test.txt 的15行以及以后所有行;
5. 删除test.txt中包含’bash’的行;
6. 替换test.txt 中’root’为’toor’;
7. 替换test.txt中’/sbin/nologin’为’/bin/login’
8. 删除test.txt中5到10行中所有的数字;
9. 删除test.txt 中所有特殊字符(除了数字以及大小写字母);
10. 把test.txt中第一个单词和最后一个单词调换位置;
11. 把test.txt中出现的第一个数字和最后一个单词替换位置;
12. 把test.txt 中第一个数字移动到行末尾;
13. 在test.txt
20行到末行最前面加’aaa:’;
现在给出以上练习题的答案,你如果实在想不出如何操作,那你看看答案吧,请尽量多想一下。
/bin/cp /etc/passwd
/root/test.
sed -n '1,$'p test.txt
sed -n '3,10'p test.txt
sed -n '/root/'p test.txt
sed '15,$'d
sed '/bash/'d test.txt
sed 's/root/toor/g' test.txt
sed 's#sbin/nologin#bin/login#g' test.txt
sed '5,10s/[0-9]//g' test.txt
sed 's/[^0-9a-zA-Z]//g' test.txt
sed 's/\(^[a-zA-Z][a-zA-Z]*\)\([^a-zA-Z].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)/\4\2\3\1/' test.txt
sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)#\1\5\3\4\2#' test.txt
sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*$\)#\1\3\2#' test.txt
sed '20,$s/^.*$/aaa:&/' test.txt
【awk工具的使用】
上面也提到了awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。awk工具其实是很复杂的,有专门的书籍来介绍它的应用,但是笔者认为学那么复杂没有必要,只要能处理日常管理工作中的问题即可。何必让自己的脑袋装那么东西来为难自己?毕竟用的也不多,即使现在教会了你很多,你也学会了,如果很久不用肯定就忘记了。鉴于此,笔者仅介绍比较常见的awk应用,如果你感兴趣的话,再去深入研究吧。
a. 截取文档中的某个段
解释一下,-F 选项的作用是指定分隔符,如果不加-F指定,则以空格或者tab为分隔符。
Print为打印的动作,用来打印出某个字段。$1为第一个字段,$2为第二个字段,依次类推,有一个特殊的那就是$0,它表示整行。
注意awk的格式,-F后紧跟单引号,然后里面为分隔符,print的动作要用’{ }’括起来,否则会报错。print还可以打印自定义的内容,但是自定义的内容要用双引号括起来。
b. 匹配字符或字符串
跟sed很类似吧,不过还有比sed更强大的匹配。
可以让某个段去匹配,这里的’~’就是匹配的意思,继续往下看
awk还可以多次匹配,如上例中匹配完root,再匹配test,它还可以只打印所匹配的段。
不过这样没有啥意义,笔者只是为了说明awk确实比sed强大。
d. 条件操作符
awk中是可以用逻辑符号判断的,比如’==’就是等于,也可以理解为“精确匹配”。另外也有’&’, ‘&=’, ‘&’, ‘&=’, ‘!=’ 等等,值得注意的是,即使$3为数字,awk也不会把它当数字看待,它会认为是一个字符。所以不要妄图去拿$3当数字去和数字做比较。
这样是得不到我们想要的效果的。这里只是字符与字符之间的比较,’6’是&’500’的。
上例中用的是’!=’ 即不匹配。
另外还可以使用”&&” 和 “||”表示“并且”和“或者”的意思。
也可以是或者的关系
d. awk的内置变量
常用的变量有:
NF :用分隔符分隔后一共有多少段;
上例中,打印总共的段数以及最后一段的值。
可以使用NR作为条件,来打印出指定的行。
e. awk中的数学运算
awk比较强的地方,还在于能把某个段改成指定的字符串,下面还有更强的呢!
当然还可以计算某个段的总和。
这里的END要注意一下,表示所有的行都已经执行,这是awk特有的语法,其实awk连同sed都可以写成一个脚本文件,而且有他们特有的语法,在awk中使用if判断、for循环都是可以的,只是笔者认为日常管理工作中没有必要使用那么复杂的语句而已。
注意这里’( )’的使用。
基本上,正则表达的内容就这些了。但是笔者要提醒你一下,笔者介绍的这些仅仅是最基本的东西,并没有提啊深入的去讲sed和awk,但是完全可以满足日常工作的需要,有时候也许你会碰到比较复杂的需求,如果真遇到了就去请教一下google吧。下面出几道关于awk的练习题,希望你要认真完成。
1. 用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt);
2. 查找所有包含’bash’的行;
3. 用’:’作为分隔符,查找第三段等于0的行;
4. 用’:’作为分隔符,查找第一段为’root’的行,并把该段的’root’换成’toor’(可以连同sed一起使用);
5. 用’:’作为分隔符,打印最后一段;
6. 打印行数大于20的所有行;
7. 用’:’作为分隔符,打印所有第三段小于第四段的行;
8. 用’:’作为分隔符,打印第一段以及最后一段,并且中间用’@’连接 (例如,第一行应该是这样的形式 “root@/bin/bash”;
9. 用’:’作为分隔符,把整个文档的第四段相加,求和;
下面给出答案:
1. awk '{print $0}' test.txt
2. awk '/bash/' test.txt
3. awk -F':' '$3=="0"' test.txt
4. awk -F':' '$1=="root"' test.txt |sed 's/root/toor/'
5. awk -F':' '{print $NF}' test.txt
6. awk -F':' 'NR&20' test.txt
7. awk -F':' '$3&$4' test.txt
8. awk -F':' '{print $1"@"$NF}' test.txt
9. awk -F':' '{(sum+=$4)}; END {print sum}' test.txt&一些很有用并且常用的正则表达式 - Web前端当前位置:& &&&一些很有用并且常用的正则表达式一些很有用并且常用的正则表达式&&网友分享于:&&浏览:16次一些很有用而且常用的正则表达式
关于测试代码本文不是使用Dreamweaver编辑,以下测试代码可能已经在赋值粘贴的过程做了一些调整,可能执行失效。匹配结尾的数字 来源:如何用 javascript 正则表达式 取出字符串最后一组数字,谢谢 如30CAC0040 取出403SFASDF92 取出92
正则如下:/\d+$/g 统一空格个数 来源:正则匹配空格的问题 字符串内字符键有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。 例如:蓝 色& 理&&& 想变成:蓝 色 理 想aobert的正则:
&script type="text/javascript"&
var str="蓝 色 理 想"
var reg=/\s+/g
str = str.replace(reg," ")
document.write(str)
&/script& 判断字符串是不是由数字组成 来源:有没有简单的方法判断字符串由数字组成? 这个正则比较简单,写了一个测试
&script type="text/javascript"&
function isDigit(str){
var reg = /^\d*$/;
return reg.test(str);
var str = "7654321";
document.write(isDigit(str));
var str = "test";
document.write(isDigit(str));
&/script& 电话号码正则 来源:想问一下关于电话号码的正则判断 :求一个验证电话号码的JS正则
/^\d{3,4}-\d{7,8}(-\d{3,4})?$/区号必填为3-4位的数字,区号之后用“-”与电话号码连接
^\d{3,4}-电话号码为7-8位的数字
\d{7,8}分机号码为3-4位的数字,非必填,但若填写则以“-”与电话号码相连接
(-\d{3,4})?手机号码正则表达式 正则验证手机号,忽略前面的0,支持130-139,150-159。忽略前面0之后判断它是11位的。 cloeft的正则:
/^0*(13|15)\d{9}$/ ^0*匹配掉开头任意数量的0。 由于手机号码是13任意数字9位,和15任意数字9位,所以可以用(13|15)\d{9}匹配。 测试代码如下:
function testReg(reg,str){
return reg.test(str);
var reg = /^0*(13|15)\d{9}$/;
var str = '';
var str2 = '';
var str3 = '';
document.write(testReg(reg,str)+'&br /&');
document.write(testReg(reg,str2)+'&br /&');
document.write(testReg(reg,str3)+'&br /&'); 使用正则表达式实现删除字符串中的空格: 来源:请问js中有没有去掉空格的函数 代码以及测试代码如下:
&script type="text/javascript"&
//删除字符串两侧的空白字符。
function trim(str){
return str.replace(/^\s+|\s+$/g,'');
//删除字符串左侧的空白字符。
function ltrim(str){
return str.replace(/^\s+/g,'');
//删除字符串右侧的空白字符。
function rtrim(str){
return str.replace(/\s+$/g,'');
//以下为测试代码
var trimTest = "
//前后各有一个空格。
document.write('length:'+trimTest.length+'&br /&');
document.write('ltrim length:'+ltrim(trimTest).length+'&br /&');
//使用ltrim后
document.write('rtrim length:'+rtrim(trimTest).length+'&br /&');
//使用rtrim后
document.write('trim length:'+trim(trimTest).length+'&br /&');
//使用trim后
&/script& 测试的结果如下:
length:11 ltrim length:10 rtrim length:10 trim length:9 限制文本框只能输入数字和小数点等等 来源:文本框输入限制的问题???? 只能输入数字和小数点
var reg = /^\d*\.?\d{0,2}$/ 开头有若干个数字,中间有0个或者一个小数点,结尾有0到2个数字。 只能输入小写的英文字母和小数点,和冒号,正反斜杠(:./\)
var reg = /[a-z\.\/\\:]+/; a-z包括了小写的英文字母,\.是小数点,\/和\\分别是左右反斜线,最后是冒号。整个组成一个字符集和代码任一均可,最后在加上+,1或者多个。 替换小数点前内容为指定内容 来源:求一正则表达式! 请问 怎么把这个字符串的小数点前面的字符替换为我自定义的字符串啊?例如:infomarket.php?id=197 替换为 test.php?id=197应该可以把第一个点“.”之前的所有单词字符替换为test就可以了。我写的正则如下:
&script type="text/javascript"&
var str = "infomarket.php?id=197";
var reg = /^\w*/
//匹配字符串开头的任意个单词字符
str = str.replace(reg,'test');
document.write(str);
&/script& 原帖的有点复杂,没太看明白。 只匹配中文的正则表达式 来源:关于上传的时候,只能选择中文名称的图片(是否可以用toASCII方法呢?) 前两天看的《JavaScript开发王》里恰好有中文的unicode范围,正则如下:
/[\u4E00-\u9FA5\uf900-\ufa2d]/ 写了一个简单的测试,会把所有的中文替换成“哦”。
&script type="text/javascript"&
var str = "有中文?and English.";
var reg = /[\u4E00-\u9FA5\uf900-\ufa2d]/
str = str.replace(reg,'哦');
document.write(str);
&/script& 返回字符串的中文字符个数 来源:有没返回中文字符字节的函数! 一般的字符长度对中文和英文都是不分别的 如JS里的length,那么如何返回字符串中中文字符的个数呢?guoshuang老师在原帖中给出了解决方案,我又没看懂…… 不过我自己也想到了一个办法:先去掉非中文字符,再返回length属性。函数以及测试代码如下:
&script type="text/javascript"&
function cLength(str){
var reg = /[^\u4E00-\u9FA5\uf900-\ufa2d]/g;
//匹配非中文的正则表达式
var temp = str.replace(reg,'');
return temp.
var str = "中文123";
document.write(str.length+'&br /&');
document.write(cLength(str));
&/script& 结果:
5 2 中文两个,数字三个,正确。 下面的测试也正确。
var str = "中文123tets@#!#%$#[][{}";
document.write(str.length+'&br /&');
document.write(cLength(str)); 正则表达式取得匹配IP地址前三段 来源:如何用正则取IP前3段 192.168.118.101,192.168.118.72, 192.168.118.1都替换成:192.168.118 只要匹配掉最后一段并且替换为空字符串就行了,正则如下:
/\.\d{1,3}$/ 匹配结尾的.n,.nn或者.nnn。 测试代码如下:
function replaceReg(reg,str){
return str.replace(reg,'')
var reg = /\.\d{1,3}$/;
var str = '192.168.118.101';
var str2 = '192.168.118.72';
var str3 = '192.168.118.1';
document.write(replaceReg(reg,str)+'&br /&');
document.write(replaceReg(reg,str2)+'&br /&');
document.write(replaceReg(reg,str3)+'&br /&'); 相似的有,这个帖子里有一个验证IP地址的方法:求检验MAC地址的正则表达例子 匹配&ul&与&ul&之间的内容 来源:请教个正则的小问题吧&ul&safsf&ul&safsf&/ul&&ul&safsf&/ul&&/ul& 用正则可以得到 &ul&起到下个&ul& 之间的内容。 正则如下:
/&ul&[\s\S]+?&ul&/i 首先匹配两侧的ul标签,中间的[\s\S]+?可以匹配一个或者多个任意字符,一定要非贪婪,否则会匹配&ul&safsf&ul&safsf&/ul&&ul&。 用正则表达式获得文件名 来源:C:\006.jpg c:\images\tupian\006.jpg 可能是直接在盘符根目录下,也可能在好几层目录下,要求替换到只剩文件名。 xlez的正则如下:
/[^\\\/]*[\\\/]+/g 首先匹配非左右斜线字符0或多个,然后是左右斜线一个或者多个。形如“xxx/”或者“xxx\”或者“/”或者“\” 函数以及测试代码:
&script type="text/javascript"&
function getFileName(str){
var reg = /[^\\\/]*[\\\/]+/g;
//xxx\或者是xxx/
str = str.replace(reg,'');
var str = "c:\\images\\tupian\\006.jpg";
document.write(getFileName(str)+'&br /&');
var str2 = "c:/images/tupian/test2.jpg";
document.write(getFileName(str2));
&/script& 注意,\需要转义。 绝对路径变相对路径 来源:讨论一个正则 将&IMG height="120" width="800" src="http://23.123.22.12/image/somepic.gif"&转换为:&IMG height="120" width="800" src="/image/somepic.gif"&。 其中网址可能改变,例如http://localhost等等。 cloudchen的正则:
/http:\/\/[^\/]+/ 首先是http://,然后[^\/]+找过1个或者多个非/字符,因为遇到第一个/表示已经到目录了,停止匹配。 测试代码如下:
&script type="text/javascript"&
var str = '&IMG height="120" width="800" \src="http://23.123.22.12/image/somepic.gif"&';
var reg = /http:\/\/[^\/]+/;
str = str.replace(reg,"");
alert(str)
&/script& 用户名正则 来源:求正则,急急呀!! 用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。 hansir和解决方案弄成正则:
/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/ 中文字符或者单词字符,4到16个。实现4到16结成到正则里的关键就是开始^和结束$,这就等于整个字符串只能有这些匹配的内容,不能有多余的。 函数和测试代码如下:
&script type="text/javascript"&
function isEmail(str){
var reg = /^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/;
return reg.test(str);
var str = '超级无敌用户名regExp';
var str2 = '捣乱的@';
var str3 = '太短'
var str4 = '太长longlonglonglonglonglonglonglong'
document.write(isEmail(str)+'&br /&');
document.write(isEmail(str2)+'&br /&');
document.write(isEmail(str3)+'&br /&');
document.write(isEmail(str4)+'&br /&');
&/script& 匹配英文地址 来源:-求助- 正则问题 规则如下:包含 "点", "字母","空格","逗号","数字",但开头和结尾不能是除字母外任何字符。 [\.a-zA-Z\s,0-9]这个字符集就实现了字母,空格,逗号和数字。最终正则如下:
/^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/ 开头必须有字母,结束也必须是一个以上字母。测试代码如下:
&script type="text/javascript"&
function testReg(reg,str){
return reg.test(str);
var reg = /^[a-zA-Z][\.a-zA-Z\s,0-9]*?[a-zA-Z]+$/;
var str = 'No.8,ChangAn Street,BeiJing,China';
var str2 = '8.No,ChangAn Street,BeiJing,China';
var str3 = 'No.8,ChangAn Street,BeiJing,China88';
document.write(testReg(reg,str)+'&br /&')
document.write(testReg(reg,str2)+'&br /&')
document.write(testReg(reg,str3)+'&br /&')
&/script& 正则匹配价格 来源:为什么这个正则不起作用啊?急啊? 价格的格式应该如下: 开头数字若干位,可能有一个小数点,小数点后面可以有两位数字。hansir给出的对应正则如下:
/^(\d*\.\d{0,2}|\d+).*$/ hansir给出的测试代码如下:
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=gb2312" /&
&title&无标题文档&/title&
&script type="text/javascript"&
function checkPrice(me){
if(!(/^(?:\d+|\d+\.\d{0,2})$/.test(me.value))){
me.value = me.value.replace(/^(\d*\.\d{0,2}|\d+).*$/,'$1');
&input type="text" onkeyup="checkPrice(this);"/&
&/html& 身份证号码的匹配 来源:关于正则的,大家帮帮忙,急,在线等 身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:
/^(\d{14}|\d{17})(\d|[xX])$/ 开头是14位或者17位数字,结尾可以是数字或者是x或者是X。 测试代码如下:
&script type="text/javascript"&
function testReg(reg,str){
return reg.test(str);
var reg = /^(\d{14}|\d{17})(\d|[xX])$/;
var str = '345';//15位
var str2 = '345678';//18位
var str3 = '34567X';//最后一位是X
var str4 = '1234';//位数不对
document.write(testReg(reg,str)+'&br /&');
document.write(testReg(reg,str2)+'&br /&');
document.write(testReg(reg,str3)+'&br /&');
document.write(testReg(reg,str4)+'&br /&');
&/script& 要求文本有指定行数 来源:[求助]求一句正则表达式的写法 匹配至少两行的字符串,每行都为非空字符。 只要匹配到[\n\r]就表示有换行了,再保证换行的两段都不是空字符就可以了。正则如下:
/\S+?[\n\r]\S+?/i 这个正则的应用应该是用在textarea里,如果是如下要求:可以支持所有字符,中间可带空格,可以包括英文、数字、中文、标点 这样的话,只要针对空格再改一下就行了。(按照非空的要求,上面有不能匹配“字符+空格+换行+字符”的字符串)。修改如下:
/\S+?\s*?[\n\r]\s*?\S+?/i 单词首字母大写 来源:求个正则,处理英文单词或词组的 每单词首字大写,其他小写。如blue idea转换为Blue Idea,BLUE IDEA也转换为Blue Idea cloeft的正则:
/\b(\w)|\s(\w)/g 所谓“首字母”包括两种情况:第一种是边界(开头)的单词字符,一种是空格之后的新单词的第一个字母。测试代码如下:
&script type="text/javascript"&
function replaceReg(reg,str){
str = str.toLowerCase();
return str.replace(reg,function(m){return m.toUpperCase()})
var reg = /\b(\w)|\s(\w)/g;
var str = 'blue idea';
var str2 = 'BLUE IDEA';
var str3 = 'Test \n str is no good!';
var str4 = 'final test';
document.write(replaceReg(reg,str)+'&br /&');
document.write(replaceReg(reg,str2)+'&br /&');
document.write(replaceReg(reg,str3)+'&br /&');
document.write(replaceReg(reg,str4)+'&br /&');
&/script& 正则验证日期格式 来源:yyyy-mm-dd的正则怎样写啊? yyyy-mm-dd格式 正则如下:
/^\d{4}-\d{1,2}-\d{1,2}$/ 4位数字,横线,1或者2位数字,再横线,最后又是1或者2位数字。 测试代码如下:
&script type="text/javascript"&
function testReg(reg,str){
return reg.test(str);
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/;
var str = '';
var str2 = '';
var str3 = '08-08-2008';
var str4 = '';
document.write(testReg(reg,str)+'&br /&');
document.write(testReg(reg,str2)+'&br /&');
document.write(testReg(reg,str3)+'&br /&');
document.write(testReg(reg,str4)+'&br /&');
&/script& 第二种格式:来源:求一正则表达式yyyy-mm-dd或yyyy/mm/dd 用“或”简单地修改一下就行了。
/^\d{4}(-|\/)\d{1,2}(-|\/)\d{1,2}$/ 去掉文件的后缀名 来源:求一个正则 /dc/fda.asp变为/dc/fda如果文件后缀已知的话这个问题就非常简单了,正则如下:
/\.asp$/ 匹配最后的.asp而已,测试代码如下:
&script type="text/javascript"&
function delAspExtension(str){
var reg = /\.asp$/;
return str.replace(reg,'');
var str = '/dc/fda.asp';
document.write(delAspExtension(str)+'&br /&');
&/script& 如果文件名未知的话就用这个正则:/\.\w+$/,测试代码如下:
&script type="text/javascript"&
function delExtension(str){
var reg = /\.\w+$/;
return str.replace(reg,'');
var str = '/dc/fda.asp';
document.write(delExtension(str)+'&br /&');
var str2 = 'test/regular/fda.do';
document.write(delExtension(str2)+'&br /&');
var str3 = '/dc/fda.strange_extension';
document.write(delExtension(str3)+'&br /&');
&/script& 验证邮箱的正则表达式 来源:找javascript写的表单检查代码! fuchangxi的正则:
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/ 开始必须是一个或者多个单词字符或者是-,加上@,然后又是一个或者多个单词字符或者是-。然后是点“.”和单词字符和-的组合,可以有一个或者多个组合。
&script type="text/javascript"&
function isEmail(str){
var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
return reg.test(str);
var str = ';
document.write(isEmail(str)+'&br /&');
var str2 = ';
document.write(isEmail(str2)+'&br /&');
var str3 = ';
document.write(isEmail(str3)+'&br /&');
var str4 = ';
document.write(isEmail(str4)+'&br /&');
var str5 = 'te..';
document.write(isEmail(str5)+'&br /&');
&/script& 我不太了解邮箱的具体规则。感觉这个正则比较简单,EMAIL校验 正则 讨论 求解里有比较详细的邮箱正则讨论。 匹配源代码中的链接 来源:正则 能够匹配HTML代码中链接的正则。 原帖正则:/&a href=".+?"&.+?&\/a&/g 感觉有点严格,首先要&a href="".+?"&有,而且href属性可以是一个或者多个除换行外任意字符(非贪婪)。后面是.+?&\/a&,一个或者多个除换行外任意字符(非贪婪),再加上结束标签。 有个问题,如果a的起始标签最后有空格,或者除了href还有其它属性的话,上面的正则就不能匹配这个链接了。 例如: &a href="asdfs" &……多了个空格。 &a id="xx" href=""asdfs"&……前面有属性。 …… 重写正则:/&a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*&[\s\S]*?&\/a&/ 思路如下:首先要有&a和一个空格。/&a\s/ 第一个(\s*\w*?=".+?")* 可以匹配一个属性,属性前面可能有或者没有多余的空格,用\s*匹配;属性名肯定是单词字符,用\w*?匹配;=".+?"就是匹配属性值了非换行字符若干个;整个括号外面加个*表示可能有任意多个属性。 (\s*href=".+?") 匹配href,它也是一个属性,所以只要把上面子正则表达式中的\w修改为href=就行了。 (\s*\w*?=".+?")*重复第一个子正则表达式,再次接受任意个属性。 \s*&,属性最后再加上若干个空格和&。 [\s\S]*?,链接的文字,可能有任何字符组成,若干个,非贪婪。 &\/a&最后是结束标签。 补充:属性名和=之间,以及=和属性值之间也可能有空格。所以要再加上几个\s*。 最后的实例代码如下:
&script type="text/javascript"&
function findLinks(str){
var reg = /&a\s(\s*\w*?\s*=\s*".+?")*(\s*href\s*=\s*".+?")(\s*\w*?\s*=\s*".+?")
*\s*&[\s\S]*?&\/a&/g;
var arr = str.match(reg);
for(var i=0;i&arr.i++){
//alert(arr[i]);
document.write('link:'+arr[i]+'&br /&');
var str = '&p&测试链接:&a id = "test" href="" title="无敌"&经典论坛
&/a&&/p&&a? href = "/"? &蓝色理想&/a&';
var arr = findLinks(str);
&/script& 会把所有的链接在页面直接显示出来。注意, 本帖遗留问题:如何执行从右到左的匹配。貌似JS或者VBS没有提供这个功能2、JS或者VBS不支持 后行断言。。用什么方法实现这个功能。 匹配链接的文字 来源:求一正则? 代码:&a href="#&这里要保存&/a&,只保存链接的文本内容,标签信息删掉。 前面写过一个匹配链接的正则:
/&a\s(\s*\w*?=".+?")*(\s*href=".+?")(\s*\w*?=".+?")*\s*&[\s\S]*?&\/a&/ 不过我们需要捕获的是文字内容,所以需要做一定的修改。第一步就是在所有的括号内都加上?:表示不捕获。第二步就是再多加一个括号放在[\s\S]*?两侧,这样就可以捕获到链接的文字内容了。最后正则如下:
/&a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*&([\s\S]*?)&\/a&/ 测试代码如下:
&script type="text/javascript"&
function anchorText(str){
var reg =/&a\s(?:\s*\w*?\s*=\s*".+?")*(?:\s*href\s*=\s*".+?")(?:\s*\w*?\s*=\s*".+?")*\s*&
([\s\S]*?)&\/a&/;
str = str.replace(reg,'$1');
var str = '&a id = "test" href="" title="无敌"&经典论坛&/a&';
document.write(anchorText(str));
&/script& 正则判断标签是否闭合 来源:求助 超难!正则表达式如何判断一个标签是否闭合 例如:&img xxx=”xxx” 就是没有闭合的标签; &p&p的内容,同样也是没闭合的标签。 从简单的正则开始,先匹配起始标签
/&[a-z]+/i 再加上若干属性:
/&[a-z]+(\s*\w*?\s*=\s*".+?")*/i 下面就到关键点了,标签的闭合。标签可能有两种方式闭合,&img xxx=”xxx” /& 或者是&p&xxx &/p&。 (\s*\/&) 匹配img类的结束,即/&。 (\s*?&[\s\S]*?&\/\1&) 匹配\p类标签的结束标签。&是其实标签末尾,之后是标签内容若干个任意字符,最后的&\/\1&就是结束标签了。 加上一个或就可以解决了,最后的完整正则表达式: 整个正则:/&([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?&[\s\S]*?&\/\1&|\s*\/&)/i 拿这个正则,只要匹配到了就表示闭合,没匹配到则没有闭合。不过没有考虑相同标签嵌套的问题,例如 &div&aaaaaa&div&test&/div& 也被判断为合格,可以通过把最后的匹配p类结束标签写成子正则表达式,并且更改为非贪心,然后在匹配结果中检查是否成对。正则如下:
/&([a-z]+)(\s*\w*?\s*=\s*".+?")*(\s*?&[\s\S]*?(&\/\1&)+|\s*\/&)/i 用正则获得指定标签的内容 来源:求一正则 有如下代码:
&title&蓝色理想&/title&
&/channel&
&title&界面设计测试规范&/title&
&title&《古典写实美女》漫画教程&/title&
&title&安远――消失的光年&/title&
&title&asp.net 2.0多语言网站解决方案&/title&
&/item& 要求匹配item里的title而不匹配channel里的title。 基本正则:
/&title&[\s\S]*?&\/title&/gi 首先是title标签,内容为任意字符若干个,然后是title结束标签。这个正则已经能匹配到所有的title标签。 首先,我简单地修改了一下原正则:
/&title&[^&&]*?&\/title&/gi, 因为title里面不应该再嵌有其它标签,这个正则同样是匹配所有标题的内容,最后再加上不去匹配channel中的title。整个正则如下:
/&title&[^&&]*?&\/title&(?!\s*&\/channel&)/gi (?!\s*&\/channel&)表示要匹配字符串的后面不能跟着若干个空格和一个channel的结束标签。 原帖里有很方便的测试工具,这里就不给测试代码了。 正则判断是否为数字与字母的混合 来源:关于正则 不能小于12位,且必须为字母和数字的混合。 验证字符串包含数字简单,验证字符串包含字母也简单,验证字符串不包含其它字符也简单,可以用这三个正则分别检查一次字符串,逻辑运算出最终结果。 但是怎么能把这些功能写进一个正则表达式里呢?这个问题真有点伤脑筋。 下面是lexrus的正则:
/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/ig 思路非常的清晰啊: [a-z]+(?=[0-9]) 字母开头,后面必须紧跟着数字。 [0-9]+(?=[a-z] 数字开头,后面必须紧跟着字母。 [a-z0-9]+ 后面的字符只要是数字或者字母就可以了。经过测试,发现不好使,123dd会被识别为不合法,dd123则为合法,可见“数字开头,紧跟字母”的正则没有起作用。测试代码如下:
&script type="text/javascript"&
function istrue(str){
var reg=/^([a-z]+(?=[0-9])|[0-9]+(?=[a-z]))[a-z0-9]+$/
return reg.test(str);
var str? = 'AaBc';
var str2 = 'aaa123';
var str3 = '123dd';
var str4 = '2';
document.write(istrue(str)+'&br /&');
document.write(istrue(str2)+'&br /&');
document.write(istrue(str3)+'&br /&');
document.write(istrue(str4)+'&br /&');
&/script& 结果为: false,true,false,false 结果中的第三个,将'123dd'判断为非法是错误的。刚开始以为是g的问题,去掉了还是不好使。应该是浏览器bug,我认为lexrus的正则是正确的,可能是浏览器无法处理或”|”的两边都包含正向预查(?=)。 修改之后的正则如下:
/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i 意思和上面差不多,但是没有使用正向预查,测试代码如下:
&script type="text/javascript"&
function istrue(str){
var reg=/^(([a-z]+[0-9]+)|([0-9]+[a-z]+))[a-z0-9]*$/i;
return reg.test(str);
var str? = 'AaBc';
var str2 = 'aaa123';
var str3 = '123dd';
var str4 = '2';
document.write(istrue(str)+'&br /&');
document.write(istrue(str2)+'&br /&');
document.write(istrue(str3)+'&br /&');
document.write(istrue(str4)+'&br /&');
&/script& 结果为 false,true,true,false 正确。 空格与英文同时存在 来源:正则问题请指教啊! 匹配英文以及空格,要求必须既有英文字母又有空格。 这个思路和上面的差不多,只要把数字改成空格就可以了。正则如下:
/^(([a-z]+\s+)|(\s+[a-z]+))[a-z\s]*$/i 英文开头加空格,或者是空格开头加英文,后面可以是英文或者空格。测试代码如下:
&script type="text/javascript"&
function istrue(str){
var reg=/^(([a-z]+\s+)|(\s+[a-z]+))[a-z\s]*$/i;
return reg.test(str);
var str? = 'asdf';
var str2 = 'sadf sdf';
var str3 = 'asdf ';
document.write(istrue(str)+'&br /&');
document.write(istrue(str2)+'&br /&');
document.write(istrue(str3)+'&br /&');
&/script& 利用这个思路也可以实现英文空格英文,英文单词多于两个的匹配。同样,也可以把英文字母换成单词字符\w。 显示或者保存正则表达式匹配的部分内容 有如下电话号码:
要求,要求只匹配135开头的电话,但是匹配结果只保留135后面的数字。 由于JavaScript里的正则不支持(?=xx)xxx的模式,只支持xxx(?=xx)的模式。所以只能将135后面的内容作为一个子正则表达式匹配的内容,然后再在后面引用。
Carl给出的函数如下:
function f(phoneNumber) {
var pattern = /^(135)(\d{8})$/;
if(pattern.test(phoneNumber))
return phoneNumber.replace(pattern,"$2");
return "不是135打头的手机号码!";
/^(135)(\d{8})$/ 正则中,135作为开头表示第一个子正则表达式,第二个括号内的子正则表达式则匹配后面的8个数字,然后在replace中使用$2就可以引用这个子正则表达式匹配的内容了。测试代码如下:
&script type="text/javascript"&
function f(phoneNumber) {
var pattern = /^(135)(\d{8})$/;
if(pattern.test(phoneNumber))
return phoneNumber.replace(pattern,"$2");
return "不是135打头的手机号码!";
var arr = new Array(
for(var i = 0; i & arr. i++)
document.write(f(arr[i])+'&br /&');
&/script& 正则表达式替换变量 来源:求教正则 有一个数组: var _A = ['A','B','C','D'];有一个有“变量”的字符串。 var _B = '&ul&&li&$0$&/li&&li&$1$&/li&&li&$2$&/li&&li&$3$&/li&&/ul&';说是变量,其实只是字符串中的特殊字符,例如$0$,就称这个为伪变量吧。 最后的要求就是使用正则获得下面这样一个字符串:_C = '&ul&&li&A&/li&&li&B&/li&&li&C&/li&&li&D&/li&&/ul&'; IamUE给出了代码:
&script type="text/javascript"&
var _A = ['A','B','C','D'];
var _B = '&ul&&li&$0$&/li&&li&$1$&/li&&li&$2$&/li&&li&$3$&/li&&/ul&';
var reg=/\$\d+\$/
C=_B.replace(reg,function($1){
var indexnum=$1.replace(/\$/ig,"");
if (indexnum&_A.length)
{return _A[indexnum];}
else{return ""}
&/script& 代码分析:看到代码之后感觉有点晕,首先,正则reg中没有任何的括号,应该是没有捕获内容的,那么后面怎么又使用$1了引用了呢?通过alert测试,发现它是整个正则匹配的内容,而且不一定要写作$1,可以写为$0,甚至是写为x都没关系,它总是整个匹配。 第一次,$1匹配到_B中的“$0$”,匿名函数中将它的$去掉,变成了0,检查是否越界之后,用这个0作为下标去访问数组_A。 由于正则reg定义了g属性,所以会继续替换$1$、$2$等等。步骤都和上面一样。 正则替换指定属性中的文本 来源:怎样用正则来查找替换? 有如下代码: &td align="center"&&img src="../photo/ccg/thumbnails/O'Malley's West_jpg.gif" border="0" onClick="MM_openBrWindow('../photo/ccg/pages/O'Malley's West_jpg.htm','BE','width=386,height=306')"&&br&
O'Malley's West&/td& 要求将所有onclick属性中的’替换成\’,也就是将单引号转义。 首先,需要匹配onclick属性:
/onclick\s*=\s*".+?"/ig 然后再将所有的’都替换成\’就可以了。 将阿拉伯数字替换为中文大写形式 来源:正则问题 将123替换成壹贰叁。 只要匹配一个数字就可以了,测试代码如下(如果显示为乱码就调整一下浏览器的字符编码):
function replaceReg(reg,str){
return str.replace(reg,function(m){return arr[m];})
arr=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var reg = /\d/g;
var str = '';
var str2 = '';
var str3 = '';
document.write(replaceReg(reg,str)+'&br /&');
document.write(replaceReg(reg,str2)+'&br /&');
document.write(replaceReg(reg,str3)+'&br /&'); 替换文本中的URL为链接 来源:求一链接替换正则 将一个用户输入的一段文字中的/img//替换成可以点击的link地址。例如:可以替换成
或&a href=""&http://www. &/a&. 这个正则的关键就在于匹配链接,匹配之后,在两边加上a标签和属性不是问题。
/http:\/\/[\w-]*(\.[\w-]*)+/ig 首先匹配http://。 [\w-]*是可能的www和bbs等。 \.[\w-]*匹配.xxx形式,至少有一个。 测试代码如下:
&script type="text/javascript"&
function replaceReg(reg,str){
return str.replace(reg,function(m){return '&a href="'+m+'"&'+m+'&/a&';})
var reg = /http:\/\/[\w-]*(\.[\w-]*)+/
var str = '将一个用户输入的一段文字中的/img//替换成可以点击的link地址。\
测试一下:紧接着中文,还有 \
is very good!!最后在看看带.cn的:.cn呵呵。';
document.write(replaceReg(reg,str)+'&br /&');
&/script& 从HTML代码段删除指定标签极其内容 来源:关于正则的问题 在一段代码中去除&script ...... /script&, &head&...&/head&,&%.....%&等代码块 隆的正则:
/&(script|meta|%)[\s\S]*?\/(script|meta|%)&/ 试了一下,匹配如下文本正常:
&script type="text/javascript"&
我是要被删除的脚本
哎。就剩下我了。 但是,如果使用类似的正则:
/&(script|head|%)[\s\S]*?\/(script|head|%)&/ig 匹配有嵌套的标签:
&script type="text/javascript"&
我是要被删除的脚本
哎。就剩下我了。 实际匹配的内容是:
&script type="text/javascript"&
我是要被删除的脚本
&/script& 这是因为[\s\S]*?里的非贪婪造成的。可以使用JavaScript正则里的反向引用来解决这个问题,如果起始标签匹配了head,那么结束标签也必须是head。最后的正则如下:
/&(script|head|%)[\s\S]*?\/\1&/ig 用正则给文本分段 来源:怎样用正则分段落 原代码:[title]标题一[/title]内容一232323sdfga [title]标题二[/title]内容二2232323 [title]标题三[/title]内容三2232323 要把文本分段成如下格式:一、[title]标题一[/title]内容一232323sdfga二、[title]标题二[/title]内容二2232323三、[title]标题三[/title]内容三2232323 只要用正则匹配title就可以了,所以正则比较简单
/\[title\]/ig 至于开始的的汉字序号,只要一个数组就解决了,最终代码如下:
&script type="text/javascript"&
function replaceReg(reg,str){
var mark =0;
return str.replace(reg,function(m){mark++;return '&br /&'+arr[mark]+'、'+m;})
var arr = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"];
var reg = /\[title\]/
var str = '[title]标题一[/title]内容一232323sdfga \
[title]标题二[/title]内容二2232323 [title]标题三[/title]内容三2232323';
document.write(replaceReg(reg,str)+'&br /&');
&/script& 转换源代码中的标签 来源:一个正则上的问题 将代码中的HTML标签img转换为。 /&img(?:\s*\w*?\s*=\s*".+?")*?\s*src\s*=\s*"(.+?)"(?:\s*\w*?\s*=\s*".+?")*\s*&/ig 这段正则和匹配链接标签的正则基本一样,修改如下,标签名img,没有结束标签而是&结束。 测试代码如下:
&script type="text/javascript"&
function replaceReg(reg,str){
return str.replace(reg,'[img]$1[/img]')
/&img(?:\s*\w*?\s*=\s*".+?")*?\s*src\s*=\s*"(.+?)"(?:\s*\w*?\s*=\s*".+?")*\s*&/
var str = '我就是传说中的图片了&img src="URL"&哎。';
document.write(replaceReg(reg,str)+'&br /&');
&/script& 第二个是替换object代码嵌入的flash代码替换为[swf]/img//[/swf]。 针对原文的正则如下:
/&object[\s\S]*?src=([\s\S]+?)(?=\s)[\s\S]*&\/object&/i 如果是所有的属性都有双引号的话正则也需要修改。 测试如下:
&script type="text/javascript"&
function replaceReg(reg,str){
return str.replace(reg,'[swf]$1[/swf]')
var reg = /&object[\s\S]*?src=([\s\S]+?)(?=\s)[\s\S]*&\/object&/i;
var str = '&object classid=clsid:D27CDB6E-AE6D-11cf-96B8- \
codebase=/pub/shockwave/cabs/flash/\
swflash.cab#version=5,0,0,0 width=255 height=250&&param name=movie \
value=/img//&&param name=quality value=high&&embed src=/img// quality=high \
pluginspage=/shockwave/download/index.cgi?\
P1_Prod_Version=ShockwaveFlash type=application/x-shockwave-flash \
width=255 height=250&&/embed&&/object&';
document.write(replaceReg(reg,str)+'&br /&');
&/script& 给属性添加双引号 来源:请教正则表达式高手 给HTML标签中的属性添加双引号。 &a href=xxx&改为:&a href="xxx"& LeXRus的第一个正则如下:
/(?!\&\w+)(\s+\w+)\=([^&\"\s]+)/ig 第一个括号没看明白,JS应该是不支持。所以我擅自给删掉了,剩下的正则如下:
/(\s+\w+)\=([^&\"\s]+)/ig 第一个括号里的\s+\w+匹配的是属性名。 然后是=,不用转义。 第二个括号里的[^&\"\s]+匹配属性值。不匹配&”和空格。这里的引号不用转义。在意思不改变的情况下,稍微改了改,正则如下:
/(\s+\w+)=([^&"\s]+)/ig 需要注意的是这个正则不匹配=两边有空格的属性,例如href = xxx。相匹配的话就改成:
/(\s+\w+)\s*=\s*([^&"\s]+)/ig 代码:
str=str.replace(/(?!\&\w+)(\s+\w+)\=([^&\"\s]+)/ig,'$1="$2"'); 其中’$1=”$2”’就实现了给属性值添加上双引号。不过ncs指出了这个正则替换的几个问题,一是上面的空格问题,二是如果非标签内部有等号,且前面又恰巧有空白字符的话,它将会被误识别为属性,例如: &a href=xxx target=yyy title = asdfasf& test=sd 里面的test=sd也会被匹配。三是如果属性原来使用了单引号,会被再包上一层双引号…… 来看看LeXRus前辈的新正则替换方法:
str=str.replace(/(?!&\w+)(\s+\w+)\s*=\s*([^&\"\s]+)(?=[^&]*&)/ig,'$1="$2"').replace(/\"\'([^\'\"]+)\'\"/ig,'\"$1\"'); 先来看第一个正则:
/ (\s+\w+)\s*=\s*([^&"\s]+)(?=[^&]*&)/ig 结尾新添的(?=[^&]*&)意在解决普通文本中有等号被误识别为属性的问题: &a href=xxx target=yyy title = asdfasf& test=sd 就没问题了,但是 &a href=xxx target=yyy title = asdfasf& test=sd&tag&又一个标签&/tag& 中的test=sd&tag&又会被识别为属性。 我觉得改成下面的正则就没问题了:
/(\s+\w+)\s*=\s*([^&&"\s]+)(?=[^&&]*&)/ig 分别在第二个括号的字符集合和最后的反向预查的字符集合中添加了一个&。 下面再来分析第二个正则,
/\"\'([^\'\"]+)\'\"/ig 这个正则用于匹配双引号,单引号多层嵌套的情况,同样,不用转义,修改正则如下: /"'([^'"]*)'"/ig 这样基本任务就完成了。测试代码如下:
&script type="text/javascript"&
function rp(str,trg){
var reg1 = /(\s+\w+)\s*=\s*([^&&"\s]+)(?=[^&&]*&)/ig
var reg2 = /"'([^'"]*)'"/
str=str.replace(reg1,'$1="$2"').replace(reg2,'\"$1\"');
trg.value=
&textarea id="sou" style="width:100%"&
&a href = xxx name=aaa target=_blank title='asdfasf'
onclick=alert('blueidea')& asfd=asfd
&/textarea&
&input type="button" onclick="rp(sou.value,sou)" value="replace"/& 原帖里LeXRus又提出了新问题: hint=i am lexrus 这样的属性会有问题,不过我感觉不加引号的话,属性值里就不可能有空格,否则会被识别为多个属性了。不过看到最后ncs的回帖我就哭了: onclick=if(document.forms.length&0) 这样的属性怎么办?大于号会被识别为标签结束……还是分离行为与文档吧。补充一下,其实修补一下正则也可以解决,只要改成如下正则即可:
/(\s+\w+)\s*=\s*([^"\s]+)(?=[^&&]*&)/ig 就是去掉第二个括号内字符集合里的&&。最后这个问题也解决。 给table加上tbody 来源:通过正则表达式快速在后加上 有若干table,但是没有tbody。现在需要用正则批量加上。 匹配table结束标签&/table&比较简单,在前面加上一个&/tbody&就行了。但是,匹配table的起始标签有点难度,因为可能有属性。不过之前匹配过链接了,这个也大同小异。 实例table代码如下:&table width="100%" border="0" cellpadding="2" cellspacing="3"&&table width="100%"&正则:
/&table\s(\s*\w*?\s*=\s*".+?")*?\s*?&/g 匹配一个&table,在匹配若干个属性,最后只要再找到&就代表标签结束。 之后再replace一下,加上&tbody&就可以了。 去掉标签的所有属性 来源:正则表达式(Dreamweaver8) &td style="width: 23 height: 26" align="left"&***&/td& 变成没有任何属性的 &td&***&/td& 思路:非捕获匹配属性,捕获匹配标签,使用捕获结果替换掉字符串。正则如下:
/(&td)\s(?:\s*\w*?\s*=\s*".+?")*?\s*?(&)/ 首先,td匹配掉了标签,后面可以用$1引用,后面的若干属性被(?:)匹配掉,而最后匹配的&则可以在后面用$2引用。 示意代码: str = str.replace(reg,’$1$2’); 正则替换特定单词 来源:正则表达式,拒绝几个单词的输入该怎样表达? 要求禁止输入某几个单词,如果拒绝red,yellow,white。这个帖子到时不难,但是让我弄清楚了好几个概念。 第一个,小心字符集合里的“或”
/[^red|yellow|white]/ 这个正则里的所有或都没有意义,等同于:
/[^redyellowwhite]/ 意思就是不能含有以下列出的所有字母。 正解:
/red|yellow|white/第二个概念: 只要整个正则匹配成功,无论子正则表达式是否匹配成功,括号都会捕捉。例如
/(red)|(yellow)|(white)/ 会捕捉到三个结果,尽管实际上最多只可能有一个括号匹配成功。但是只要有一个匹配到了,两外两个也会记录空串。 指定文字高亮显示 来源:如何用正则把网页中的指定的字高亮显示 请教正则表达式:如何替换搜索结果中的关键字为高亮显示? 不劳而获一次,这个子虚乌有前辈已经给出了非常好的解决方案:我直接把代码贴出来了:
&!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-/DTD/xhtml1-transitional.dtd"&
&html xmlns="http://www.w3.org/1999/xhtml"&
&meta http-equiv="Content-Type" content="text/ charset=gb2312" /&
&META name="Author" content="Sheneyan" /&
&script type="text/javascript"&
function encode(s){
s.replace(/&/g,"&").replace(/&/g,"&").replace(/&/g,"&").replace(/([\\\.\*\[\]\(\)\$\^])/g,"\\$1");
function decode(s){
s.replace(/\\([\\\.\*\[\]\(\)\$\^])/g,"$1").replace(/&/g,"&").replace(/&/g,"&").replace(/&/g,"&");
function highlight(s){
if (s.length==0){
alert('搜索关键词未填写!');
s=encode(s);
var obj=document.getElementsByTagName("body")[0];
var t=obj.innerHTML.replace(/&span\s+class=.?highlight.?&([^&&]*)&\/span&/gi,"$1");
obj.innerHTML=t;
var cnt=loopSearch(s,obj);
t=obj.innerHTML
var r=/{searchHL}(({(?!\/searchHL})|[^{])*){\/searchHL}/g
t=t.replace(r,"&span class='highlight'&$1&/span&");
obj.innerHTML=t;
alert("搜索到关键词"+cnt+"处")
function loopSearch(s,obj){
var cnt=0;
if (obj.nodeType==3){
cnt=replace(s,obj);
for (var i=0,c;c=obj.childNodes[i];i++){
if (!c.className||c.className!="highlight")
cnt+=loopSearch(s,c);
function replace(s,dest){
var r=new RegExp(s,"g");
var t=dest.nodeV
var cnt=0;
if (tm=t.match(r)){
t=t.replace(r,"{searchHL}"+decode(s)+"{/searchHL}")
dest.nodeValue=t;
&style type="text/css"&
.highlight{background:font-weight:color:}
&form onsubmit="highlight(this.s.value);"&
&p&&input name="s" id="s" title="搜索内容:"/&&input type="submit" value="搜索"/&&/p&
&div id="content"&
测试高亮的代码。很长很长的代码……………………
&/html& 删除标签 来源:如何使用正则表达式去除大部分HTML标记? 删除除了&img&、&br&、&p&之外所有的标签。子虚乌有给出代码中关键的一句:
o.innerHTML.replace(/(&\/?(?!br|p|img)[^&\/]*)\/?&/gi,''); 刚开始没反应过来,后来才想起来,这个正则不用区分起始和结束标签。 &\/?(?!br|p|img) 匹配除了保护标签外标签的起始标签或者是结束标签的一部分。 [^&\/]* 匹配到&或者/就结束。 \/?& 起始标签或者结束标签的结尾。 错误贴 熟悉正则的帮忙看看,一个小问题:反斜线灾难。 正则表达式通过变量传递后,\t转义字符的奇怪表现。:同上。 太难贴 我从来没用过UBB,这个关于UBB的帖子,我觉得比较难,就没有总结:关于表格的正则表达式讨论(已实现,特别感谢lexrus)。 JSON我也不太明白,这个贴还没看,以后学了JSON再说。正则替换json数据问题。 还有一个挺难的帖子,正则的难题,感觉不应该用正则。 正则表达式做打字练习游戏:有什么特别好的办法(正则表达式问题)。里面有位高手做出来了,不过是只在IE下有效。 匹配数字的“正则” 来源:[求助]匹配数字的正则式 匹配数字字符挺简单,但是匹配正数,负数之类的还真挺麻烦。不过子虚乌有前辈的一句话到是非常经典:“不要一想到验证就想去用正则”。 是啊,不会正则的时候使劲躲,看了两天正则恨不得JavaScript编程“正则Script”。 类似的: 请问这个问题是不是必须要用正则表达式才能结局啊解决啊? 哪位高手知道怎么用正则替换图片名称吗? 复杂正则求助。。。。。。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信