使用以下文本作为我的msg变量:
/private UserName:some message without leading whitespace
/private UserName: some message with leading whitespace
以下javascript来解析它:
if(msg.indexOf('/private') == 0){
msg = msg.substring(8,msg.length);
var parts = msg.match(/\s+(.+?)\:\s*(.+?)/);
alert("Name: " + parts[0]);
alert("Message: " + parts[1]);
}
我希望索引0包含 UserName 和索引1包含某些消息与...
任何人都能看到我错过的东西吗?
答案 0 :(得分:3)
稍微调整你的正则表达式:
/^\/private\s+(.*?):\s*(.*?)$/
简化您的代码:
var regex = /^\/private\s+(.*?):\s*(.*?)$/;
var parts = regex.exec(msg);
if (parts){
alert("Name: " + parts[1]);
alert("Message: " + parts[2]);
}
parts[0]
是整个匹配的字符串。您需要parts[1]
和parts[2]
。
答案 1 :(得分:1)
var msg = '/private UserName:some message without leading whitespace \
/private UserName: some message with leading whitespace';
if (msg.indexOf('/private') == 0) {
msg = msg.substring(8,msg.length);
var parts = msg.match(/\s+(.+?)\:\s*(.+?)/);
console.log("Name: " + parts[0]);
console.log("Message: " + parts[1]);
}
打印
Name: UserName:s
Message: UserName
我会调试msg
和parts
变量的值。另外,请检查http://regexpal.com/等网站上的正则表达式。看起来你的正则表达式可能匹配太多了。你想让它以结肠结束吗?如果是这样,请尝试更像这样的事情
\s+(\S+?)\:
答案 2 :(得分:0)
你想要做的是拆分和修剪:)
类似的东西:
parts = msg.split(" ",1)[1].split(":",1);
alert("Name: " + parts[0]);
alert("Message: " + $trim(parts[1]));
trim是一个jquery函数,但你可以使用regex:)