代码:
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
命令说明。
答案 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*(.*)