js中正则表达式的问题,为什么这个正则表达式都找不到匹配?

karrie 发布于 2013/07/21 07:21
阅读 542
收藏 1
加载中
0
killparty
killparty
在字符集内部,点号就不是元字符,只能匹配点号这个字符,而不能匹配任意字符.看你意图是希望匹配包含换行符在内的任意字符,可以用[\s\S],[\w\W]这种来替换。
0
Jackin
Jackin
在JS里 如果 正则不是多行模式的话,那么 . 是能匹配到 换行的
0
karrie
karrie

引用来自“killparty”的答案

在字符集内部,点号就不是元字符,只能匹配点号这个字符,而不能匹配任意字符.看你意图是希望匹配包含换行符在内的任意字符,可以用[\s\S],[\w\W]这种来替换。

可是js里的正则手册是这么说的“.匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。”并且.是元字符。

我问的可能不够直观,下面这个例子能劳烦看一下么?谢谢

<script>
//str=什么才能符合这个呢
/\bhate\b[.\n]*\blike\b/
//re=/\bhate\b.*\blike\b/; //re=/\bhate\b\n\blike\b/; re=/\bhate\b[.\n]*\blike\b/; alert(re.multiline); //re=/\bhate\b.*\blike\b/; //str="i'm hate.i'm like!"; //str="i'm hate i'm like"; //str="i'm hate jk like"; str="i'm hate \n like"; document.write(str); if(re.test(str)) { alert("相符"); } else { alert("不符"); } </script>




0
karrie
karrie

引用来自“Jackin”的答案

在JS里 如果 正则不是多行模式的话,那么 . 是能匹配到 换行的

alert了一下multiline,是falise


我问的可能不够直观,下面这个例子能劳烦看一下么?谢谢

<script>
//str=什么才能符合这个呢
/\bhate\b[.\n]*\blike\b/
//re=/\bhate\b.*\blike\b/; //re=/\bhate\b\n\blike\b/; re=/\bhate\b[.\n]*\blike\b/; alert(re.multiline); //re=/\bhate\b.*\blike\b/; //str="i'm hate.i'm like!"; //str="i'm hate i'm like"; //str="i'm hate jk like"; str="i'm hate \n like"; document.write(str); if(re.test(str)) { alert("相符"); } else { alert("不符"); } </script>



0
Jackin
Jackin
console.log("i'm hate \n like".match(/\bhate\b[\s\S]+\blike\b/));
0
killparty
killparty
我不知道js的正则手册是啥,这个点号在[]中不是元字符不管在哪个语言里都是这样,至少我还没碰到过例外。要改的话你只需要将 [.\n]改为[\s\S]就行了。
0
萌龙
萌龙
在[]中只有^是元字符,所以点号在里面就仅仅是个点号了,可以试试(.|\n|\r)*来匹配
返回顶部
顶部