m是multiline
如果写了/m ,那么模式匹配将以多行的模式进行.在这
种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾
如果写了/m ,那么模式匹配将以多行的模式进行.在这
种模式下,锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾,还匹配检索字符串内部的一行的开头和结尾
解决方案 »
- 子页面提交到服务器后,怎样弹出提示框并刷新父页面还要关闭这个子页面
- 为输入框随便加个属性应该没问题吧?
- 滚动条问题
- textarea刪除问题............................................................標題長才有人注意
- 我使用的您编写的树形控件1.0,怎么实现点开一个节点,其它的展开节点关闭的功能啊
- js的冒抛在实际编程中有什么作用?
- 用JS得到smarty上的下拉框值
- 怎么做个和CSDN一样的显示导航栏的东东,要一模一样的!代码看不懂!
- 高分求教!不够在加
- 双倍的分解决同一个问题,就看在分的份上帮我解决一下这个问题吧
- 我要刷新已打开的子窗口(子窗口不在框架中),请问这个怎么做啊,急给分
- 怎样设置正正则的multiline属性
比如一个串:"aaaaaaaaa\n\rxxxxxxx","锚字符 ^ 和 $ 匹配的不只是检索字符串的开头和结尾还匹配检索字符串内部的一行的开头和结尾"
那么如果带了m标记,锚字符 ^ 匹配第一个a,还匹配第一个“x”?$匹配最后一个a,还匹配最后一个x?
请大家给点信心
<script language=javascript>
var a="aaaaaaaaa\n\rxxxxxxx";
re=/^(a|x){1,30}$/gm
var b=a.match(re)
alert(b[0]);
alert(b[1]);
</script>
这个上面b[0]的值是aaaaaaaaa b[1]的值是xxxxxxx
匹配到了两个,而^是匹配字符串的开头,$是匹配字符串的结尾,就是必须以a或x开头并且结尾才能匹配到,如果匹配的是整个字符串的话只能匹配到一个,因为并没有超过30个字符限制。而现在匹配到两个就是对每一行都进行了匹配。
我觉得其实做程序员已经非常自豪的,楼主多想想这个就会有信心的。
是由于你要匹配的字符串里面有\n
\n也符合你的正则的要求,就继续向下匹配。
所以把一行内的\n也算到里面了,变成只能匹配一个的正则
var x=/.{1,3}/g;
var str="aaaa\n\rxxxx";//使用\n,和使用\r的效果是不一样的
var r=str.match(x);
alert(r);
我原来对m 这个flag理解是:如果有m,则pattern回去匹配多行,如果没有,则只会匹配第一行。但是这个例子里没有m,只有g,它也匹配了多行,所以有点糊涂了。像这个例子里,只要有g就行了
http://soulogic.com/doc/RegularExpressions
http://webuc.net/ddf3/archive/2005/03/18/2945.aspx
http://www.zahui.com/html/7/
http://51js.zahui.net/html/1/
=/.{1,3}/g
这个匹配全局
而把\n\r都当成字符匹配了,m的作用好象只有在^$才有用