0

使用以下文本作为我的 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 包含用户名 ,索引 1 包含一些带有...的消息

有人看到我错过了什么吗?

4

3 回答 3

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]

于 2012-12-13T02:35:19.273 回答
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

我会调试你msgparts变量的值。此外,请在http://regexpal.com/之类的网站上检查您的正则表达式。看起来您的正则表达式可能匹配太多。你希望它以冒号结尾吗?如果是这样,请尝试更多类似的东西

\s+(\S+?)\:
于 2012-12-13T02:48:37.393 回答
0

您要做的是拆分和修剪:)

就像是 :

parts = msg.split(" ",1)[1].split(":",1);

alert("Name: " + parts[0]);
alert("Message: " + $trim(parts[1]));

trim是一个 jquery 函数,但你可以用 regex 来做 :)

于 2012-12-13T02:36:08.387 回答