请求高手帮忙写一个或者两个正则表达式条件
1,以$开头,空格或者回车键结尾
2,或者,以#foreach开头,半个括号)结尾
3,一个关键字 #end例子 $name $title #foreach($i in $test)
   $i.name
 #end
如果能用一个正则同时能满足以上两个请求的话,请给一个正则表达式,
如果一个满足不了,就给两个正则表达式吧。注:如果对java熟悉的话,其实上面就是velocotiy的匹配规则
js的IQ不够,请大牛帮忙,非常感谢。

解决方案 »

  1.   

    <html>
    <head>
    <script type='text/javascript'>
    window.onload = function() {
        var reg = /^(?:\$|#foreach).*(?:\n+|\r|\))$|#end/g;
    var str = "";
    var div = document.getElementById('str');
    str = div.innerHTML;
    var b = reg.test(str);
    alert(b);
    }
    </script>
    </head><body>
    <div id='str'>
        $name $title
     
     #foreach($i in $test)
       $i.name
     #end
    </div>
    </body>
    </html>
      

  2.   

    谢谢,但是$开头的没有匹配到,比如例子中 $name $title 以及 $i.name 没有匹配到.请高手再修改下,谢谢了。
      

  3.   

    谢谢jslang,但是 $title 和 $i.name没有被匹配到,就是$开头,以换行符结尾的没有被匹配到 例如例子里 $title 和 $i.name 都是换行符号结尾的(其后面没有空格)麻烦高手再帮忙修改下,谢谢了。
      

  4.   

        var reg = /^(?:\$|#foreach).*(?:\s+|\r|\))$|#end/g;
      

  5.   

    var reg=/^((\s*\$\S+\s*)|#foreach\(\$\w+\s*in\s*\$\w+\)[\s\S]+#end)+$/g;如果你为做模板,就把关键字,变更替换成Java语言就行了
      

  6.   

    这个#foreach 和#end没有匹配到。。
    请高手再修改下,谢谢了。
      

  7.   

    s = '$name $title\
     \
     #foreach($i in $test)\
       $i.name\
     #end';
    document.write(s.match(/#[^)]+\)?|\$[\w.]+/g));
    $name,$title,#foreach($i in $test),$i.name,#end
    1,以$开头,空格或者回车键结尾
    2,以#开头,半个括号)结尾
    3,一个关键字 #end
      

  8.   

    不知你怎么调用的,我测试可以呀
    reg=/^((\s*\$\S+\s*)|#foreach\(\$\w+\s*in\s*\$\w+\)[\s\S]+#end)+$/g;
    alert( str.match(reg))
    alert( reg.test(str))
      

  9.   

    我就用平常简单的html测试的,
    使用浏览器是chrome,但是匹配不对不知你怎么调用的,我测试可以呀
    reg=/^((\s*\$\S+\s*)|#foreach\(\$\w+\s*in\s*\$\w+\)[\s\S]+#end)+$/g;
    alert( str.match(reg))
    alert( reg.test(str))
      

  10.   

    感谢版主,理解完全正确
    版主给的正则表达式,对$匹配OK,但是对#开始的匹配,范围太广了,
    只要是#开头的,全部都被匹配了;而并不是,只匹配#foreac 和 #end能麻烦再帮忙修改下吗?
    谢谢了。
      

  11.   

    s = '$name $title\
     #aaa\
     #foreach($i in $test)\
       $i.name\
     #end';
    document.write(s.match(/#foreach[^)]+\)?|#end|\$[\w.]+/g));
      

  12.   

    完全OK!!
    不愧是JS版主,佩服的五体投地。
    非常感谢,
    也谢谢,其它帮助的朋友。
    Thank your!!