Js正则 多行匹配问题

rainsilence 2012-05-21 02:37:43

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

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?>中出现了换行,用上面的方法就不行了

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就可以实现:


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());
}
}
}


...全文
388 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hch126163 2012-05-21
  • 打赏
  • 举报
回复
var reg = new RegExp("<\\?JS([\d\D]*?)JS\\?>", "g");
一起混吧 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

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

java中的 .可能可以匹配换行。但javascript中的 .不匹配换行符。他匹配换行符以外的任何字符
[/Quote]
+++,用\S\s 能匹配到换行。有些语言利用模式修正符能把换行符当普通字符处理。但js没有。
挨踢直男 2012-05-21
  • 打赏
  • 举报
回复
var reg = new RegExp("<\\?JS([\\S\\s]*?)JS\\?>", "g");

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

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

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧