2016-11-25 7 views
0

基本的には文字列があり、文字の繰り返しに一致する最短の部分文字列(先頭も含む)連続しているかどうかは関係ありません。私はJavascriptでそれを使いたい。文字列の最初の部分の正規表現は、繰り返し(連続または非連続)文字に一致する

例: 文字は「/」であり、5つの繰り返しに一致するようにします。

この文字列の場合: http://remote-computer.example.local/home/dev/proj/sdk/docs/index.html#/api

一致する文字列は次のようになります。この文字列の http://remote-computer.example.local/home/dev/

: ////リモート・コンピュータ/例/ローカル/ホーム

マッチング文字列は ////リモートコンピュータ/

答えて

3

この正規表現はどうですか:

^((?:[^/]*/){5}) 

したい部分文字列は、グループあなたができるJavaScriptで1

にcatchedされます。

var re = new RegExp("^((?:[^/]*/){5})); // excape the slashes is not mandatory 

または

var re = /^((?:[^\/]*\/){5})/; // here you have to excape the slashes 

説明:

^   : begining of the string 
(   : start capture group 1 
    (?:  : start non capture group 
    [^/]*/ : 0 or more any character that is not a slash, followed by a slash 
    ){5} : the non capture group occurs 5 times 
)   : end of group 1 
+0

すごく速くて動作しているように見えます。あなたはそれが何をしているのか説明できますか? – Javiere

+0

JSで動作させるには、文字をエスケープする必要があります。どうもありがとう。 – Javiere

+1

@Javiere:私の編集を参照してください。正規表現のコンストラクタ( 'new RegExp(" blah blah ")')を使用している場合は、スラッシュを省略する必要はありません – Toto

2

(?:.*?/){5}を使用できます。 See a demo here

これはトトの正規表現とまったく同じストリングに一致するが、短い:

  1. ^を使用する必要はありません。正規表現は最初にで一致するように開始します。です。
  2. 全体を一致させるために、キャプチャグループは必要ありません。トトがやったようにも[^/]*/のように書くことができ、「それ含むすべて次の/まで、」
  3. .*?/試合、。
+0

短くても、その式は先頭を含まない他の部分文字列にも一致します – Javiere

+0

@Javiereどういう意味ですか? ? Regexpsは常に文字列の先頭で一致を開始します。これがうまくいかない例を挙げることはできますか? – bfontaine

+0

私はそれがパターンを含んでいるどんな文字列にもマッチすることを意味します。 – Javiere

関連する問題