读书人

Js正则 多行匹配有关问题

发布时间: 2012-05-27 05:42:30 作者: rapoo

Js正则 多行匹配问题

如果是这样的字符串,那么<?JS ...JS?>中的字符串匹配成功。

JScript code
var test = "<span>123123<?JS1231231</span>2JS?>123123<?JS12JS?><span>3</span><?JS13JS?>";var reg = new RegExp("<\\?JS(.*?)JS\\?>", "g");test.replace(reg, function(element) {    alert(element);});



但是,如果<?JS ....\r\n ....JS?>中出现了换行,用上面的方法就不行了
JScript code
var test = "<span>123123<?JS123123\n1</span>2JS?>123123<?JS12JS?>\r\n<span>3</span><?JS \n13JS?>";var reg = new RegExp("<\\?JS(.*?)JS\\?>", "g");test.replace(reg, function(element) {    alert(element);});


在mode中加入m也没有效果,请问这是为什么?


相同的功能用java就可以实现:

Java code
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        String test = "<span>123123<?JS123123\r\n1</span>2JS?>123123<?JS12JS?>\r\n<span>3</span><?JS \n13JS?>";        Pattern pattern = Pattern.compile("<\\?JS.*?JS\\?>", Pattern.DOTALL);         Matcher matcher = pattern.matcher(test);           while(matcher.find()) {               System.out.println(matcher.group(0).trim());           }    }}


[解决办法]
JScript code
var reg = new RegExp("<\\?JS([\\S\\s]*?)JS\\?>", "g");
[解决办法]
探讨

JScript code
var reg = new RegExp("<\\?JS([\\S\\s]*?)JS\\?>", "g");

这个跟多行标志m没有关系的
m是表示每一个换行的行 都能用 ^匹配开头 用 $匹配结尾

java中的 .可能可以匹配换行。但javascript中的 .不匹配换行符。他匹配换行符以外的任何字符

[解决办法]
var reg = new RegExp("<\\?JS([\d\D]*?)JS\\?>", "g");

读书人网 >JavaScript

热点推荐