re.exec(str) = str.match(re)
返回都是数组,re.test(str)返回boolean
返回都是数组,re.test(str)返回boolean
解决方案 »
- 有没有办法控制同域名下的其他页面(非父--子)?请教下音乐播放器只同时打开一个的问题
- 大热天的在线等
- 实现WEB上的对象关联移动问题!以及线对象问题!请JavaScript高手帮帮忙!
- 正则表达式括号中的$是什么意思,如(?!\D+$)
- javascript下载文件问题
- 如何使输入文本框中的内容显示在中间?
- 梅花雨来领分(答应的决不失言)
- 用firefox调试一段代码,单步运行就是正常的,直接运行就不正常,为什么啊?
- Uncaught Error: Syntax error, unrecognized expression: :nth-child
- js中数组中的对象用属性进行排列如果属性值相同再用别的属性进行排列
- 请教问题,高手请进
- 高分求救:
<div id="test" onDblClick="aa();">
<ul>
<li><a href="a1.htm">a1</a></li>
<li><a href="a2.htm">a2</a></li>
</ul>
</div>
<script>
function aa(){
var str= test.innerHTML;
alert(str);
var re=/<li>.*<\/li>/ig;
var aa=re.exec(str);
for(var i=0;i<aa.length;i++)
{
alert(aa[i]);
}
}这个返回结果中总是只包含了一个元素,即它匹配的最后一个。按照这个正则式,两个<li>元素都满足,但是返回的数组中只包含了最好一次匹配的结果,就是的二个<li>元素。
这两个函数是否只包含了最后一次匹配的结果?
<div id="test" onDblClick="aa();">
<ul>
<li><a href="a1.htm">a1</a></li>
<li><a href="a2.htm">a2</a></li>
</ul>
</div>
<script>
function aa(){
var str= test.innerHTML;var re=/(<li>.*)(<\/li>)/ig;
var aa=re.exec(str);
for(var i=0;i<aa.length;i++)
{
alert(aa[i]);
}
}
</script>
exec(str)这个函数返回的数组有三个元素:第一个是最后一次匹配整个正则式的字串:
<li><a href="a2.htm">a2</a></li> ,第二个是在第二次匹配中与正则式中第一个括号匹配的:
<li><a href="a2.htm">a2</a>,第三个是第二次匹配中与正则式中第二个括号匹配的:
</li>
然而:第一次匹配的结果:<li><a href="a1.htm">a1</a></li>却不在返回的结果数组中,我觉得这正则式真实不按常理出牌(或者是我的思维习惯有毛病,我总以为,既然两个<li>元素的字串都符合整个正则式,那么结果数组中应该是要包含这个两个字串才对,而不应该去包含最后一次匹配中的匹配子表达式的字串。因为我觉得,我既然写了这样一个正则式,那么我当然希望得到或检测到符合整个正则式的字串,返回结果不应该只包括最后一次匹配到整个正则式的串,它也不应该包含符合其子表达式的字串,因为如果我需要检测符合其子表达式的串,那么我就会单独拿出该正则式中的一个子表达式来使用)
不知道我的理解是否有问题,请高手指教,我相信这个东西对很多初学者都有用。谢谢
这两个函数是否只包含了最后一次匹配的结果?你alert(str)一下str看看就知道了
这个str的第一个li并没有</li>,只有第二个才有。
所以只匹配了一个<li>
这样/(<li>.?*)(<\/li>)/ig;试试
http://msdn.microsoft.com/library/en-us/script56/html/js56jslrfJScriptMethodsTOC.asp
new RegExp()会先转成//后再用的,所以你要求想用\n,得用\\n因为在转换时会消化掉一个\
而find,split像是不支持的,它会把正则表达式当成字符串来处理,可以试下,如/要/g=="/要/g"
match,,exec这二个像是相同吧,都是在执行后会更改RegExp的text index等为当前的,所以你可以用FOR来在取得时得到当前的,这样就不会在它执行完后只是取到最后的信息,
而这个像是只是返回真假和可以用下sourcevalue就是正则表达式本身
test,
地区性 "那位要是会或者了解这个方法是不是支持查找\N的话请教下,我等会试下,它是不是也把回车符转成\n字符串,
结果数组中为啥会有符合其中圆括号里子表达式的字串呢:比如用var re=/(<li>.*)<\/li>/ig;,数组第二个元素是:<li><a href="a2.htm">a2</a>,可是这并不是我想要的,我既然构造这样一个正则式,我是希望得到sourcettext中符合这整个正则式的内容啊
大家在教较我
(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 '\(' 或 '\)'。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
我想那位可以写出如下表达式就行了,我想了半天就是不能作到 可以有任何的除了什么 这个,那位以说下,
<div id="test" onDblClick="aa();">
<ul>
<li><a href="a1.htm">a1</a></li>
<li><a href="a2.htm">a2</a></li>
</ul>
</div>
<script>
function aa(){
var str= test.outerHTML;
var re=/以<li>开头,中间任何,但不含<li>,要是有</li>就结束查找/gim;
var a;
for(; (a=re.exec(str)) != null; )
{
alert(a.index + "-" + a.lastIndex + "\t" + a);
}
}
</script> 呵,另问下为什么下面的会是假呢?
<textarea id=text>
ddd
ddd
d
</textarea>
<script>
var rng = text.createTextRange();
alert(rng.findText(text.value))
</script>
而这样会是真
<textarea id=text>ddddddd</textarea>
<script>
var rng = text.createTextRange();
alert(rng.findText(text.value))
</script>
The LI element is an inline element and does not require a closing tag.IE认为<li>是一个内联标签,并不需要闭合标签。在firefox下面则无此问题。
<div id="div1">
<a href="qy.php?id=129"><font color="#000000">北京丰收葡萄酒有限公司 </font></a>
<a href="qy.php?id=130"><font color="#000000">中国长城葡萄酒有限公司、华夏葡萄酿酒有限公司 </font></a>
<a href="qy.php?id=132"><font color="#000000">中法合营王朝葡萄酿酒有限公司 </font></a>
</div>
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = div1.innerHTML;
var re = new RegExp("<a[^<>]+?\>((.|\n)*?)<\/a>", "gi");
var a = str.match(re);
for(var i=0;i<a.length;i++)
{
alert(a[i]);
}
//-->
</SCRIPT>再来看第二段儿程序,这里只弹出了两个对话框,而且最后一个弹出的是括号里匹配的内容.
<div id="div1">
<a href="qy.php?id=129"><font color="#000000">北京丰收葡萄酒有限公司 </font></a>
<a href="qy.php?id=130"><font color="#000000">中国长城葡萄酒有限公司、华夏葡萄酿酒有限公司 </font></a>
<a href="qy.php?id=132"><font color="#000000">中法合营王朝葡萄酿酒有限公司 </font></a>
</div>
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = div1.innerHTML;
var re = /<a[^<>]+>(.*?)<\/a>/gi;
var a = re.exec(str)
for(var i=0;i<a.length;i++)
{
alert(a[i]);
}
//-->
</SCRIPT> 这让小弟是很是纳闷儿,我想获取里面的129,130,132这些内容,还有那些链接的显示文本,就是那些汉字,弄的我好头大,真是的,后来经过"梦在流浪"的指点,写出了一下算法,总算是懂了一点正则表达式匹配的原理了,以前看过《javascript宝典》里讲的正则表达式匹配顺序和规律,都忘了。
<div id="div1">
<a href="qy.php?id=129"><font color="#000000">北京丰收葡萄酒有限公司 </font></a>
<a href="qy.php?id=130"><font color="#000000">中国长城葡萄酒有限公司、华夏葡萄酿酒有限公司 </font></a>
<a href="qy.php?id=132"><font color="#000000">中法合营王朝葡萄酿酒有限公司 </font></a>
</div>
<br>
<SCRIPT LANGUAGE="JavaScript">
<!--
var str = div1.innerHTML;
//alert(str);//这里你可以看到color="#000000"已经变成了color=#000000,没有了引号,所以再写表达式的时候要注意了.
var re = new RegExp("<a[^<>]+?\>((.|\n)*?)<\/a>", "gi");
var a = str.match(re); //第一次搜索
for(var i=0;i<a.length;i++)
{
var temp;
//alert("第一次搜索的完整匹配,包括括号里面的匹配部分\n"+a[i]);
temp = a[i].match(/qy.php\?id=(\d+)/ig); //第二次搜索
//alert("第二次搜索的完整匹配,也就是href的引号中间的部分\n"+temp[0]);
alert("第二次搜索的匹配结果的括号中的部分,也就是链接的数字参数\n"+RegExp.$1);
temp = a[i].match(/<font[^<>]+?color=#000000\>(.*?)<\/font>/ig);
alert("第三次搜索的匹配结果的括号中部分,也就是链接的文本部分\n"+RegExp.$1);
}
//-->
</SCRIPT>
顺便贴一下“梦在流浪给我的函数”
<SCRIPT LANGUAGE="JavaScript">
var str1 = div1.innerHTML;
var re = /<a[^<>]+>([^a]*?)<\/a>/gi;
var a = re.exec(str1);
var b=re.exec(str1);
var c=re.exec(str1);
alert(a[1]);
alert(b[1]);
alert(c[1]);
</SCRIPT>
看看