本帖最后由 joulang 于 2012-12-08 12:30:00 编辑

解决方案 »

  1.   

    var context=["<script language=\"javascript\" src=\"xxx.js\"><\/script>","<script language=\"javascript\"> code..<\/script>"];
    var reg=/<script language="javascript"(\s+src="xxx.js"){0,}>.*<\/script>/;
    for(var i in context){
    alert(context[i]);
    alert(reg.test(context[i]));
    }
    这样试试
      

  2.   

    var reg=/<script language="javascript"(\s+src="xxx.js")?>.*<\/script>/;
    一个script里应该最多只有一个src  貌似
      

  3.   


    var patt = /<script.*?t"([\W]src=.*.js*?\")*[\W]{1}(.*?)<\/script>/g;已测试
      

  4.   


    非常不错,要的就是这个效果,不过请问你正则/<script.*?t"中的t"是什么意思,这个好像没见过,不太明白,我把.*?t"替换为[^\>]*?不行了..
      

  5.   

    如果<script 后面是固定的language=\"javascript\"你这样写是对的,但<script后面还有可能是type属性,这样你就匹配不了,我的问题也是出现在这里,我代码的问题点就是在 /<script[^\>]*?中的[^\>]*?,我把这个改成四楼的/<script.*?t"就正确了,但是我就是不明白他这个正则的意思,以我的理解就是.*?任意非换行符以非贪婪模式出现任意次,但是后面的这个t"是什么意思我就不懂了..
      

  6.   


    别单看那个t,t后面有个"号,表示t"这串指的是 language="javascript"中最后两个字符。
      

  7.   

    原本我以为把language="javascript"放到src后面即这样写你的就匹配不上了<script src="xx.js" language="javascript" >test</script>,没想到还是匹配上,你的/<script.*?t"([\W]src=.*.js*?\")*[\W]{1}(.*?)<\/script>/g;中的t"不是在src前面么,怎么我把language="javascript"放到后面还能匹配上?正则不是按顺序来匹配的吗?不解..更奇怪的是我把language="javascript"换成language='javascript'(换成单引号)还能匹配上,我彻底纳闷了..能解释一下这是为什么吗
      

  8.   

    3楼的答案就是错的,3楼的正则表达式下列字符串都能匹配:
    <script src="xx.js" language="javascript" >test</script>
    <script!@#language="javascript"!@#src="xx.js" >test</script>
    还有很多,只写几个典型的。
      

  9.   

    var patt = /<script.*?t"([\W]src=.*.js*?\")*[\W]{1}(.*?)<\/script>/g; 仅仅针对lz给出的事例,不具备通用性
    现变更为同样适合适合9楼 事例的匹配
    var patt = /<script(.*(src=.*\.js\S*['"]))|((src=.*\.js\S*['"]).*)|.*\>(.*)<\/script>/g
    T[3]--> src="xxx.js"
    T[6]--> code...
    lz最好了解下js的正则表达式中的exec的用法,上面的表达式并不适合一个字符串中同时存在2个及以上的<script....>