javascript RegExp multiline多行匹配影响的^$

2025-05-29 0 31

内容全写注释里了- –

复制代码 代码如下:


<script type="text/javascript">
/^$/.test('\\n'); //false,为什么呢,说明如下

var p = /^/mg;
var s = '1\\n\\n\\n2\\n\\n3';
p.test(s); //跳过开始位置JS里好象没那个词- –
p.test(s);
alert(RegExp.rightContext.replace(/\\x0A/g, '\\\\a'));
//由此得出^匹配的是\\n后面的位置或开始的位置

var p = /$/mg;
var s = '1\\n\\n\\n2\\n\\n3';
p.test(s);
alert(RegExp.rightContext.replace(/\\x0A/g, '\\\\a'));
//由此得出$匹配的是\\n前面的位置或结尾的位置

var p = /^\\s*$/mg;
var s = '1\\n\\n\\n2\\n\\n3';
alert(s.replace(p, function (l, index) {
alert(index);
return '';
}).replace(/\\x0A/g, '\\\\a'));

/*
即位置或范围用|表示
第一次匹配

注锚点不耗字符,所以它匹配的内容是位置用|标明
内容用|内容|标明

^匹配的位置是1\\n|\\n\\n2\\n3\\n4\\n5
\\s匹配的是内容是1\\n|\\n|\\n2\\n3\\n4\\n5
$匹配的位置是1\\n\\n|\\n2\\n3\\n4\\n5

这时lastIndex为1\\n\\n|\\n2\\n3\\n4\\n5

所以第二次匹配时
^匹配的位置是1\\n\\n|\\n2\\n3\\n4\\n5
\\s匹配了\\n,然后$没成功所以回溯一次,然后匹配成功所以它实际没匹配东西即内容是1\\n\\n||\\n2\\n3

\\n4\\n5(就是空的)
$匹配的位置是1\\n\\n|\\n2\\n3\\n4\\n5
然后发现没变位置,所以强制驱动,设置lastIndex为1\\n\\n\\n|2\\n3\\n4\\n5

后面的操作和这次一样。。。所以匹配执行了3次

分开来看执行下面代码。。。
*/

var p = /^\\s*$/mg;
var s = '1\\n\\n\\n2\\n\\n3';
p.test(s); //true
alert(RegExp.lastIndex); //3
p.test(s); //true
alert(RegExp.lastIndex); //强制驱动后的结果即4
p.test(s); //true
alert(RegExp.lastIndex); //7
p.test(s); //false
alert(RegExp.lastIndex); //匹配失败没设置global的RegExp对象
/^X$/g.test('a'); //false
alert(RegExp.lastIndex); //注:匹配失败是不会设置global的RegExp对象的
/^X$/.test('X'); //true
alert(RegExp.lastIndex); //匹配成功当然会设置^^
</script>

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 javascript RegExp multiline多行匹配影响的^$ https://www.kuaiidc.com/88891.html

相关文章

发表评论
暂无评论