一些很有用而且常用的正则表达式
关于测试代码
本文不是使用Dreamweaver编辑,以下测试代码可能已经在赋值粘贴的过程做了一些调整,可能执行失效。
匹配结尾的数字
来源:如何用 javascript 正则表达式 取出字符串最后一组数字,谢谢
如
30CAC0040 取出40
3SFASDF92 取出92
正则如下:/\d+$/g 统一空格个数
来源:正则匹配空格的问题
字符串内字符键有空格,但是空格的数量可能不一致,通过正则将空格的个数统一变为一个。
例如:蓝 色 理 想
变成:蓝 色 理 想
aobert的正则:
</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就可以了。我写的正则如下:
其中网址可能改变,例如http://localhost等等。
cloudchen的正则:
/http:\/\/[^\/]+/ 首先是http://,然后[^\/]+找过1个或者多个非/字符,因为遇到第一个/表示已经到目录了,停止匹配。
测试代码如下:
用户名正则
来源:求正则,急急呀!!
用于用户名注册,,用户名只 能用 中文、英文、数字、下划线、4-16个字符。
hansir和解决方案弄成正则:
/^[\u4E00-\u9FA5\uf900-\ufa2d\w]{4,16}$/ 中文字符或者单词字符,4到16个。实现4到16结成到正则里的关键就是开始^和结束$,这就等于整个字符串只能有这些匹配的内容,不能有多余的。
函数和测试代码如下:
身份证号码的匹配
来源:关于正则的,大家帮帮忙,急,在线等
身份证号码可以是15位或者是18位,其中最后一位可以是X。其它全是数字,正则如下:
/^(\d{14}|\d{17})(\d|[xX])$/ 开头是14位或者17位数字,结尾可以是数字或者是x或者是X。
测试代码如下:
<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*。
最后的实例代码如下:
会把所有的链接在页面直接显示出来。注意,
本帖遗留问题:如何执行从右到左的匹配。貌似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>/ 测试代码如下:
正则判断标签是否闭合
来源:求助 超难!正则表达式如何判断一个标签是否闭合
例如:<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
用正则获得指定标签的内容
来源:求一正则
有如下代码:
正则表达式替换变量
来源:求教正则
有一个数组:
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给出了代码:
要求将所有onclick属性中的’替换成\’,也就是将单引号转义。
首先,需要匹配onclick属性:
/onclick\s*=\s*".+?"/ig 然后再将所有的’都替换成\’就可以了。
将阿拉伯数字替换为中文大写形式
来源:正则问题
将123替换成壹贰叁。
只要匹配一个数字就可以了,测试代码如下(如果显示为乱码就调整一下浏览器的字符编码):
。
/<img(?:\s*\w*?\s*=\s*".+?")*?\s*src\s*=\s*"(.+?)"(?:\s*\w*?\s*=\s*".+?")*\s*>/ig
这段正则和匹配链接标签的正则基本一样,修改如下,标签名img,没有结束标签而是>结束。
测试代码如下:
原帖里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: 23px; height: 26px;" align="left">***</td>
变成没有任何属性的
<td>***</td>
思路:非捕获匹配属性,捕获匹配标签,使用捕获结果替换掉字符串。正则如下:
/(<td)\s(?:\s*\w*?\s*=\s*".+?")*?\s*?(>)/ 首先,td匹配掉了标签,后面可以用$1引用,后面的若干属性被(?:)匹配掉,而最后匹配的>则可以在后面用$2引用。
示意代码:
删除标签
来源:如何使用正则表达式去除大部分HTML标记?
删除除了<img>、<br>、<p>之外所有的标签。子虚乌有给出代码中关键的一句:
o.innerHTML.replace(/(<\/?(?!br|p|img)[^>\/]*)\/?>/gi,'');
刚开始没反应过来,后来才想起来,这个正则不用区分起始和结束标签。
<\/?(?!br|p|img)
匹配除了保护标签外标签的起始标签或者是结束标签的一部分。
[^>\/]*
匹配到>或者/就结束。
\/?>
起始标签或者结束标签的结尾。
错误贴
熟悉正则的帮忙看看,一个小问题:反斜线灾难。
正则表达式通过变量传递后,\t转义字符的奇怪表现。:同上。
太难贴
我从来没用过UBB,这个关于UBB的帖子,我觉得比较难,就没有总结:关于表格的正则表达式讨论(已实现,特别感谢lexrus)。
JSON我也不太明白,这个贴还没看,以后学了JSON再说。正则替换json数据问题。
还有一个挺难的帖子,正则的难题,感觉不应该用正则。
正则表达式做打字练习游戏:有什么特别好的办法(正则表达式问题)。里面有位高手做出来了,不过是只在IE下有效。
匹配数字的“正则”
来源:[求助]匹配数字的正则式
匹配数字字符挺简单,但是匹配正数,负数之类的还真挺麻烦。不过子虚乌有前辈的一句话到是非常经典:“不要一想到验证就想去用正则”。
是啊,不会正则的时候使劲躲,看了两天正则恨不得JavaScript编程“正则Script”。
类似的:
请问这个问题是不是必须要用正则表达式才能结局啊解决啊?
哪位高手知道怎么用正则替换图片名称吗?
复杂正则求助。。。。。。
1 楼 citybuster_one 2011-09-08 好东西,收藏着!