我初学正则,常看别人的例子,有一些问题,希望大家能帮帮忙:1:去除重复的字符
str="1:2,1:3,1:4,2:3,2:5,2:6,3:1,4:3,1:2,1:4,1:6,1:2,1:2,1:3"
reg=/([\d]:[\d])([^\1]*),\1/
问题是:[^\1] 到底代表了什么字符,好像什么都能替代,我试了很多次也找不出来2:元字符在RegExp对象中的使用方法
var key= "<a href='http://bbs.test.com/read.php?tid=100'>××××××××</a></br>"
var reg2=/<a[^<>]*[^<>]*>(?:(?!<\/?a><\/br>)[\s\S])*<\/a><\/br>/gi
问题:我用这个字面量的正则可以查找替换,但我把正则定义为RegExp("....","")形式就替换不了了,我想应该是元字符的问题,但不清楚怎么修改?3:奇怪的问题
正则的目的是有12个字符并包含caat字符串的单词
var reg1=/\b(?=\w{12}\b)\w*caat\w*/gi;
var s1="abcdefgacaat";
var s2="123caatadfaf";
var s3="adsfcaatad1a";
var s4=" vdsacaata_d";
alert(reg1.test(s1));
alert(reg1.test(s2));
alert(reg1.test(s3));
alert(reg1.test(s4));
我希望用alert的方式看结果,可在字符串匹配的情况下alert方式为“true”,
“false”,“true”,“false”,请问这是什么问题?
十分感谢!
str="1:2,1:3,1:4,2:3,2:5,2:6,3:1,4:3,1:2,1:4,1:6,1:2,1:2,1:3"
reg=/([\d]:[\d])([^\1]*),\1/
问题是:[^\1] 到底代表了什么字符,好像什么都能替代,我试了很多次也找不出来2:元字符在RegExp对象中的使用方法
var key= "<a href='http://bbs.test.com/read.php?tid=100'>××××××××</a></br>"
var reg2=/<a[^<>]*[^<>]*>(?:(?!<\/?a><\/br>)[\s\S])*<\/a><\/br>/gi
问题:我用这个字面量的正则可以查找替换,但我把正则定义为RegExp("....","")形式就替换不了了,我想应该是元字符的问题,但不清楚怎么修改?3:奇怪的问题
正则的目的是有12个字符并包含caat字符串的单词
var reg1=/\b(?=\w{12}\b)\w*caat\w*/gi;
var s1="abcdefgacaat";
var s2="123caatadfaf";
var s3="adsfcaatad1a";
var s4=" vdsacaata_d";
alert(reg1.test(s1));
alert(reg1.test(s2));
alert(reg1.test(s3));
alert(reg1.test(s4));
我希望用alert的方式看结果,可在字符串匹配的情况下alert方式为“true”,
“false”,“true”,“false”,请问这是什么问题?
十分感谢!
解决方案 »
- ajaxfileupload使用出错
- [JQuery]幻灯里轮播的图片如何与相关文字同步轮播?
- js 问题,快疯了,帮帮忙.....
- Ext类的 Method 与 Event 有什么区别?
- 请教:该怎么实现日期分割?
- js刷新问题
- @ @ @ @ @ @问个简单点的东西!呵呵!浮动提示菜单的问题@ @ @ @ @ @
- 多个文本输入框对应多个复选框,该怎么来让它们的值一一对应?就是说要取出被选中复选框对应的文本框的值?着急!
- 如何动态生成层?因我生成层的数目是随机的,且数量很大
- 如何取得表单中多选项与单选项的值?
- 求助各位高手,有个问题想问一下,谢谢大家帮个忙
- 如何使页面中的表格或层不服从页面的统一的CSS样式?
var s = "wwc";
alert(/(.)[^\1]/.exec(s));
alert(/(.)(?!\1)./.exec(s));
</script>
这个语查不如期待。
并且第一个。。结果也不如期待。。
伤心中。。
这样的取值判断下到是可以达到效果。。不过好麻烦的说。。
好想只编译一次的话,第2个匹配接着第1次匹配的结果进行的,具体的还在查,忘了在哪看过了http://community.csdn.net/Expert/TopicView3.asp?id=5416975这上面的当时我也遇到这样的情况,在每次调用前在重新编译下就行var s1="abcdefgacaat";
var s2="123caatadfaf";
var s3="adsfcaatad1a";
var s4=" vdsacaata_d";
var reg1=/\b(?=\w{12}\b)\w*caat\w*/gi;
alert(reg1.test(s1));
var reg1=/\b(?=\w{12}\b)\w*caat\w*/gi;
alert(reg1.test(s2));
解决的办法还是上面的:每次调用前在重新编译下
仔细看看下文
http://www.chiqiang.com/logs/2006/11/3785992.html
我把关键的地方烤下来:
1。 假如你的正则表达式使用了"g"标记,你可以多次使用exec 方法来连续匹配相同的串。当你这样做
的时候,新的匹配将从由正则表达式的lastIndex 属性值确定的子串中开始。(test一样的方法)2。
RegExp的属性 在javascript 1.2, NES 3.0以上版本提供
描述:lastIndex 是个别的正则表达式对象的属性。 这个属性只有当正则表达式的"g"标记被使用以进行全串匹配的时候才被设置。实行以下规则:
如果lastIndex大小字符串的长度,regexp.test和regexp.exec失败,且lastIndex被设为0。
如果lastIndex等于字串的长度且正则表达式匹配空字符串,则正则表达式从lastIndex的位置开始匹配。
如果lastIndex等于字符串的长度且正则表达式不匹配空字符串,则正则表达式不匹配input,且lastIndex被置为0。
否则,lastIndex被设置成最近一次匹配的下一点。举例var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
alert(bbb.test("aaaaaa"))
alert(bbb.lastIndex)
//var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
alert(bbb.test("中中aa中中"))
alert(bbb.lastIndex)
//var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
alert(bbb.test("aaa中aa"))
alert(bbb.lastIndex)
这个与上面的区别在于第2个的长度,比6大多了,可以匹配到true
var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
alert(bbb.test("aaaaaa"))
alert(bbb.lastIndex)
//var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
alert(bbb.test("中中aa中中中中中中"))
alert(bbb.lastIndex)
//var bbb=/[a-z\u4e00-\u9fa5]{2,}/gi
alert(bbb.test("aaa中aa"))
alert(bbb.lastIndex)