function test()
{
  var s = 'ss {|*se*|}  {|*ganga*|} {|*se*|} {|*ganga*|} {|*hao*|} {|*hao*|} {|*ganga*|}';
  var a = new Array();
  a[0] = '{|*se*|}';
  a[1] = '{|*hao*|}';
  a[2] = '{|*ganga*|}';  for(i=0;i<a.length;i++)
{
  //想根据a[i]的值得到相应的正则,进一步求出来字符串中有a[i]的数量
}}主要问题就是如何根据a[i]的值得到相应的正则,因为我发现正则好像不是字符串类型的,我无语了,,不知道怎么弄的,请大家帮忙看下

解决方案 »

  1.   

    通过字符串构建正则表达式应使用正则表达式对象:正则表达式对象
    本对象包含正则表达式模式以及表明如何应用模式的标志。语法 1
    re = /pattern/[flags]语法 2
    re = new RegExp("pattern",["flags"]) 参数
    re必选项。将要赋值为正则表达式模式的变量名。Pattern 必选项。要使用的正则表达式模式。如果使用语法 1,用 "/" 字符分隔模式。如果用语法 2,用引号将模式引起来。flags可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用,可用的有: g (全文查找出现的所有 pattern) 
    i (忽略大小写) 
    m (多行查找) 
    说明
    不要将正则表达式对象跟全局 RegExp 对象混淆。尽管听起来像是一回事,但它们是截然不同的。正则表达式对象的属性只包含一个正则表达式的信息,而全局 RegExp 对象的属性包含了不断更新的每一个匹配出现的信息。正则表达式对象保存用于查找字符串中的字符组合时的模式。创建正则表达式对象后,或者它被传递给字符串方法,或者字符串被传递给一个正则表达式方法。有关最近进行查找的信息被保存在全局 RegExp 对象中。当预先知道查找字符串时用语法 1。当查找字符串经常变动或不知道时用语法 2,比如由用户输入得到的字符串。在使用前 pattern 参数被编译为内部格式。对语法 1 来说,pattern 在该脚本被装载时被编译。对语法 2 来说,pattern 在使用前,或调用 compile 方法时被编译。 示例
    下面的示例创建一个包含正则表达式模式及相关标志的对象(re),向您演示正则表达式对象的用法。在本例中,作为结果的正则表达式对象又用于 match 方法中:function MatchDemo(){
       var r, re;                     // 声明变量。
       var s = "The rain in Spain falls mainly in the plain";
       re = new RegExp("Spain","i");  // 创建正则表达式对象。
       r = s.match(re);               // 在字符串 s 中查找匹配。
       return(r);                     // 返回匹配结果。
    }PS:如果你要构建完善的正则表达式,需要注意替换字符串里面的特殊字符:特殊字符
    有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符,必须首先将这些字符转义,也就是在前面使用一个反斜杠 (\)。下表给出了这些特殊字符及其含义:
    特殊字符 说明
    $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
    ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
    * 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
    + 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
    . 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
    [  标记一个中括号表达式的开始。要匹配 [,请使用 \[。 
    ? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
    \ 将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
    ^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
    { 标记限定符表达式的开始。要匹配 {,请使用 \{。
    | 指明两项之间的一个选择。要匹配 |,请使用 \|。
      

  2.   

    var s = 'ss {|*se*|}  {|*ganga*|} {|*se*|} {|*ganga*|} {|*hao*|} {|*hao*|} {|*ganga*|}', 
    a = ['{|*se*|}', '{|*hao*|}', '{|*ganga*|}'];
    for (i = 0; i < a.length; i++) {
    alert(a[i] + ': ' + s.match(new RegExp(a[i].replace(/([{}|^$+?:\*\[\]\-\.])/g, '\\$1'), 'g')).length);
    }
      

  3.   

    用 1 楼的语法2:re = new RegExp("pattern",["flags"]) 看一下:http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm
    这个地址是正则最基本的用法
      

  4.   

    下面需要转义的字符没有列全,参照3楼的地址中的数据补全<script>
    function toRegExp(str){
    var reg = /([\{\}\[\]\(\)\<\>\.\+\\\/\*\?\|])/gi;// 将需要转义的字符全列出来,字符前要加\ ,最外面的()和[]不用加
    str = str.replace(reg, "\\$1");
    return str;
    }function test(){
    var s = 'ss {|*se*|}  {|*ganga*|} {|*se*|} {|*ganga*|} {|*hao*|} {|*hao*|} {|*ganga*|}';
    var a = new Array();
    var reg = null;
    a[0] = '{|*se*|}';
    a[1] = '{|*hao*|}';
    a[2] = '{|*ganga*|}'; for(i = 0; i < a.length; i++){
    reg = new RegExp(toRegExp(a[i]),"g");
    alert(a[i] + "=========" + s.match(reg).length);
    }
    }test();
    </script>