在JavaScript正则表达式中获取错误

时间:2015-05-05 07:21:49

标签: javascript regex

代码:

var str = '/tip -a 20 send 20tips to   chinu';
var parts = str.match(/^\/(\S+)\s+(\S+)\s+(\S+)\s*(.*)/).slice(1);
console.log(parts);

输出:

["tip", "-a", "20", "send 20tips to   chinu"]

我想更改文字:

var str = '/tip 20 send 20tips to   chinu';

结果应为["tip", "20", "send 20tips to chinu"],但我得到["tip", "20", "send", "20tips to chinu"]

请帮帮我。

修改

变量str包含动态文本。它可能是/tip 20/tip -a 20 检查http://myshowcam.com/NewSite/chat-room/chinu类型/help命令,您将获得/tip命令说明。

3 个答案:

答案 0 :(得分:1)

您可以将此正则表达式与filter(Boolean)的可选第二部分一起使用:

// case 1
var str = '/tip -a 20 send 20tips to   chinu';
var parts = 
 (str.match(/^\/(tip)\s+(-[apm]\s+)?(\S+)\s*(.*)/) || ['tip', 'tip']).
      filter(Boolean).slice(1);
//=> ["tip", "-a ", "20", "send 20tips to   chinu"]

// case 2
str = '/tip 20 send 20tips to   chinu';
parts = 
 (str.match(/^\/(tip)\s+(-[apm]\s+)?(\S+)\s*(.*)/) || ['tip', 'tip']).
      filter(Boolean).slice(1);
//=> ["tip", "20", "send 20tips to   chinu"]

// case 3
str = '/tip';
parts = 
 (str.match(/^\/(tip)\s+(-[apm]\s+)?(\S+)\s*(.*)/) || ['tip', 'tip']).
      filter(Boolean).slice(1);
//=> ["tip"]

答案 1 :(得分:1)

    var str1 = '/tip -a 20 send 20tips to   chinu';
    var str2 = '/tip 20 send 20tips to   chinu';
    var str3 = '/tip 20';
    
    function getArr(str) {
        if (str.split(" ")[1].indexOf("-")==0) return str.match(/^\/(\S+)\s+(\S+)\s+(\S+)\s*(.*)/).slice(1);
        else return str.match(/^\/(\S+)\s+(\S+)\s*(.*)/).slice(1);
    }
    alert(getArr(str1))
    alert(getArr(str2))
    alert(getArr(str3))

答案 2 :(得分:0)

如果动态文本在可选开关

之前始终包含-,则可以使用以下内容
^\/(\S+)\s+(-\S+)?\s*(\S+)\s*(.*)