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にはUserNameが含まれ 、インデックス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

msg私はあなたとparts変数の値をデバッグします。また、 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]));

トリムはjquery関数ですが、正規表現を使用して実行できます:)

于 2012-12-13T02:36:08.387 に答える