1

私はこの URL を javascript "/people/things/" で持っています。"things" のみを返す関数が必要です。どうすればよいですか?

私は醜いものを試しました。繰り返しのようですが、残りの文字列を削除する方法を見つけなければならないときに行き詰まり、漸近的に非常に遅くなります。

私は「ILLEGAL」を取得し続けます。超迷惑。

$(function() { 

    var parse = function(str) {

        var a = "";   
        if (str.length && str.length > 1) {

           str = str.slice(0, str.length -1);   //remove first

            for (var i = str.length; i > 1; i--) {
                if (str[i] !== '\\' ) {
                      a += str[i];
                    }

            }


        }

        return a;

    };   

       c = "\things\stuff\";
       alert(parse(c));        //result should be "things"                

});​
4

1 に答える 1

1

まず第一に、match()代わりに以下を使用してコードを簡素化できます。

var s = "/people/things/";
var match = s.match(/\/([^/]+)\/$/);
var things = match[1]; // "things"

エラーに関しては、文字列でエスケープするのILLEGALを忘れたためです。の代わりに、 を使用します。\\things\stuff\\\things\\stuff\\

さて、あなたのparse機能に。一般的な考え方は正しいですが、いくつかの実装エラーがあります。

  1. breakあなたが見つけるとすぐにループから抜けます\\elseあなたの一部if); それ以外の場合は、 をスキップして、他のすべての文字\を追加します。
  2. 配列を最初から最後までトラバースし、各文字を文字列に追加しています。したがって、最終的にはの文字列が得られます。これを修正するには、 を使用する代わりに を使用a += str[i]しますa = str[i] + a
  3. ia.length - 1ではなく、で始まる必要がありa.lengthます。

最終版は次のとおりです。

var parse = function(str) {
  var a = '';   
  if (str.length && str.length > 1) {
    str = str.slice(0, str.length -1);
    for (var i = str.length - 1; i > 1; i--) {
      if (str[i] !== '\\' ) {
        a = str[i] + a;
      } else {
        break;   
      }
    }
  }
  return a;
};

デモ

于 2012-09-06T21:56:06.557 に答える