js正则/<.+?>/gim疑问? 本帖最后由 zzxxzzooo 于 2009-11-27 15:16:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 .表示任何字符, +表示至少一个字符, ?表示尽量少的, 也就是从"<"到下一个">"为止123.001是被匹配的整个字符串, 123.00是你获取的第一个匹配, 也就是 至少一个数字+一个点+两个数字 还有这里的m表示进行多行匹配的意思,我记得除了^或$之外,使用m没有任何意义.附加参数m,表明可以进行多行匹配,但是这个只有当使用^和$模式时才会起作用,在其他的模式中,加不加入m都可以进行多行匹配(其实说多行的字符串也是一个普通字符串) var number="123.001"; alert(number.match(/^(\d+\.\d{2})\d*$/)); 为什么这个会返回{123.001,123.00} ?????? .+ 便是1或者n个除换行符之外的所有字符,后面加了?表明这是一个非贪婪(惰性)匹配。加入html代码是这样的<p style="">段落内容</p>/<.+>/gim 匹配的是<p style="">段落内容</p>而/<.+?>/gim 会有两个匹配,分别是<p style="">和</p> 关于String的match方法请参考http://w3school.com.cn/js/jsref_match.asp var number="123.001"; alert(number.match(/^(\d+\.\d{2})\d*$/)); 为什么这个会返回{123.001,123.00} ??????规则后面没加g啊,不是全局的怎么返回两个??? 如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。 index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。 楼主所给的非贪婪模式写法通常是不可取的,还有i和m模式用在这里也没意义var reg = /<[^>]*>/g;参考正则基础之——贪婪与非贪婪模式 match返回的是一个集合,包含所有捕获组匹配到的内容其中123.00是由捕获组(\d+\.\d{2})匹配到的内容用非捕获组代替捕获组看一下var number="123.001";alert(number.match(/^(?:\d+\.\d{2})\d*$/)); jquery 或js 正则问题 新手学习Exj js 这个效果这么做? 跪求 JS while循环判断某值是否为false,如果不是则执行下面的代码,循环体该怎么写 JavaScript调用VC程序传参数问题 (分享)Yahoo! UI Library 0.12.2 请教:如何隔五分钟刷新一次网页 迫切想知道!!!!! 怎样打印Frame中的内容,很急! 简单的50分题 JS弹出层,完美中的缺限,求解决办法~~ 脚本能创建IE对象 能否创建 HTA对象
alert(number.match(/^(\d+\.\d{2})\d*$/));
为什么这个会返回{123.001,123.00}
??????
而/<.+?>/gim 会有两个匹配,分别是<p style="">和</p>
alert(number.match(/^(\d+\.\d{2})\d*$/));
为什么这个会返回{123.001,123.00}
??????规则后面没加g啊,不是全局的怎么返回两个???
var reg = /<[^>]*>/g;参考
正则基础之——贪婪与非贪婪模式 match返回的是一个集合,包含所有捕获组匹配到的内容
其中123.00是由捕获组(\d+\.\d{2})匹配到的内容
用非捕获组代替捕获组看一下
var number="123.001";
alert(number.match(/^(?:\d+\.\d{2})\d*$/));