现写一个正则的搜索功能,要求根据关键字搜索出相对应的id,下面是我写的function searchReg(keyWord){
var str = "@xinlang|新浪|1@souhu|搜狐|2@wangyi|网易|3@baidu|百度|4@tengxun|腾讯|5@kaixinwang|开心网|6@renrenwang|人人网|7@1haodian|1号店|8@";
var reg = new RegExp("[^@]*" + keyWord + "[^@]*","gi");
var arr= [];
str = str.replace(reg, function(a){
arr.push(a);
});
console.log(arr);
}
searchReg("x")这是个简单的搜索功能,其中的1、2、3、4.....表示的是对应的id,我是想用户输入中文或者拼音的情况下,找到匹配项,但是现在有个问题,就是如果关键字本事是id的话,上面的正则也给匹配出来了,比如关键字是1,第一条新浪的数据就会匹配上,我想要的是不进行id的匹配,只进行中文和中文拼音的匹配,那么这个正则该怎么写?

解决方案 »

  1.   

    那就if判断一下,输入为\d+时不执行
      

  2.   

    <!doctype html>
    <html>  
        <head>  
            <title>tank fighting</title>  
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
            
        </head>  
        <body>
         <input id="inputbox" type="text" value="" />
         <input id="btn" type="button" value="search" />
            <script>
             var str = "0@xinlang|新浪|1@souhu|搜狐|2@wangyi|网易|3@baidu|百度|4@tengxun|腾讯|5@kaixinwang|开心网|6@renrenwang|人人网|7@1haodian|1号店|8@";
             document.getElementById('btn').onclick = function(){
             var val = document.getElementById('inputbox').value,
             reg = new RegExp("(\\w)*@(?:\\w+\\|)?"+val),
             ret = reg.exec(str);
             alert(ret[1]);
             }
            </script>  
        </body>  
    </html>  
      

  3.   

    (?<A>\d*?)\@(?<B>.*?)\|(?<C>.*?)\|    Express做的测试, 得到7个结果。每个结果3个组,不需要的组自己去掉。[0@xinlang|新浪|]
    A:0
    B:xinlang
    C:新浪
    [1@souhu|搜狐|]
    A:1
    B:souhu
    C:搜狐
    ...
      

  4.   

    你可以根据  xinlang  或者是 新浪这两个关键词获取他的ID,
    把上面的正则改下就可以,
    (?<A>\d*?)\@(?<B>xinlang)\|(?<C>.*?)\|   简化(?<A>\d*?)\@xinlang\|.*?\|(?<A>\d*?)\@.*?\|(?<C>新浪)\|             简化(?<A>\d*?)\@.*?\|新浪\|