有一字符窜如下:
var s = "
^~厂商指导价:45-48.8万^~级    别:跑车
^~厂    家:菲亚特汽车^~车    型:2门三厢、4门
^~质    保:3年不限里程^~排    量:3.0L
"
用一javascript正则表达式获取红色字体,而且红色部分里面的内容是会变的,也就是说不能直接/菲亚特汽车/
我用c#正则表达式很快就配出来了:(?<=(厂    家:))[^\^]*  
于是我就把它变成/(?<=(厂    家:))[^\^]*/  ,他就报错说正则表达式语法错误!

解决方案 »

  1.   

    对javascript不熟,但是知道javascript是不支持(?<=exp)这样的语法的,而javascript也没有在提取的方法中提供捕获组功能,目前能想到的一个办法,能实现楼主的要求,但效率较低<script type="text/javascript"> 
    var s = " \
    ^~厂商指导价:45-48.8万^~级    别:跑车 \
    ^~厂    家:菲亚特汽车^~车    型:2门三厢、4门 \
    ^~质    保:3年不限里程^~排    量:3.0L \
    " ;
    alert(s.replace(/^[\s\S]*?厂\s*家:([^\^]*)[\s\S]*$/gi,"$1"));
    </script>
      

  2.   

    忽然发现,这样居然可以直接得到想要的结果<script type="text/javascript"> 
    var s = " \
    ^~厂商指导价:45-48.8万^~级    别:跑车 \
    ^~厂    家:菲亚特汽车^~车    型:2门三厢、4门 \
    ^~质    保:3年不限里程^~排    量:3.0L \
    " ;
    alert(s.match(/厂\s*家:([^\^]*)/)[1]);
    </script>
      

  3.   

    研究了一下,原来match在不加/g的时候,匹配结果是一个数组,该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本,也就是捕获组的内容但是在加了/g之后,匹配结果是一个数组,不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是所有匹配的字符串,在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置,也就是不再保存捕获组匹配的内容所以如果全文中只有一个你要的结果,可以用5楼的方法,如果有多个,那就要换RegExp.exec()了
      

  4.   

    Javascript 中,()表示獲取匹配的組,相當於 C# Group,而 match 方法返回一個數組,第一個元素是匹配整個正則的結果,後面的元素是匹配各個括號中的正則的結果,例如:
    var date = '今天是 2008-12-3';
    var matchs = date.match(/(\d{4})-(\d{1,2})-(\d{1,2})/)
    //--> matchs[0] = 2008-12-3
    //--> matchs[1] = 2008
    //--> matchs[2] = 12
    //--> matchs[3] = 3
    在正則表達式後加 g 表示重復查找,加 i 表示忽略大小寫
    要判斷有沒有匹配到結果,衹要簡單的 if(matchs) 就可以了
      

  5.   


    var s = " 
    ^~厂商指导价:45-48.8万^~级    别:跑车 
    ^~厂    家:菲亚特汽车^~车    型:2门三厢、4门 
    ^~质    保:3年不限里程^~排    量:3.0L 
    " s.match(/厂\s*家:(.*?)\^/)[1];   // 菲亚特汽车