2017-02-18 3 views
0

私の質問がちょっと混乱していたらごめんなさい、英語は母国語ではないので、たくさんのURLを、URLが変更そのリストの最初のURL続ける、ここで私は置き換えたいテキストです:URLの束をそのリストの最初のURLに置き換える方法

[rotate=url1.usa.gov;url2.facebook.com/;http://9gag.com] 

変更しない唯一のものは[rotate=....]で、URLは、私は結果になりたい;によって分割されています次のとおりです。

var str = str.replace(/\[rotate=.*;.*\]/g, '$0'); 
しかし、私はそれを行うとき、結果は次のとおりです。 $0 私はこれをどのように行うことができますか?

+0

キャプチャしたグループ '.replace(/ \ [rotate =(。*?);。* \] /、 '$ 1')' – Tushar

+0

を使用する正規表現が嫌いならば、最初に 'split( ';' '分割された配列の最初の項目に対して' split( '=') 'を実行し、最初の要素を取得します。 – Tushar

+0

@Tusharありがとう、あなたは私の問題を解決しました。 – Squidward

答えて

2

.replaceは、置換文字列内で$で始まるいくつかの特別なシーケンスを解釈しますが、$0はその1つではありません。

一致から部分文字列を抽出する場合は、グループを取得する必要があります(( ... ))。それらにマッチしたものはマッチオブジェクトのプロパティとして利用でき、$1,$2、...は置換文字列になります。あなたのケースでは

私はある

str.replace(/\[rotate=([^;\]]*)(?:;[^\]]*)?\]/g, '$1') 

でいいと思う:[rotate=example.com]example.comに変わります:リストで唯一のURLがある場合でもこれは堅牢である

\[rotate=  // find '[rotate=', followed by 
( [^;\]] * ) // 0 or more characters that are not ';' or ']' 
       // (and remember this part as $1), 

(?:   // group, but don't capture 
    ;   // a literal ';' 
    [^\]] *  // 0 or more characters that are not ']' 
)?    // this group is optional 
\]    // a literal ']' 

+0

非常によく説明された答え、ありがとうございます:) – Squidward

0

それでも、正規表現を使用する場合は、あなたが試みることができる:

"url1.usa.gov" 

を返し

str.replace(/\[rotate=([^;\[\]]*)(;[^\[\];]*)*\].*/g, '$1') 

test casesを参照してください。

+0

は '[rotate = A]とrandom 'here'と' [rotate = A; B]とrandom' here'で失敗します。 – melpomene

+0

@melpomeneここで失敗がどういう意味か分かりません。結果はhttps://regex101.com/r/lpAwWY/1で確認できますか?私が正しく理解しているなら、 '[rotate = A; B]'と '[rotate = A]'はどちらも 'A'を得なければなりませんか? – Chazeon

+0

を参照してください。https://regex101.com/r/lpAwWY/2 – melpomene

関連する問題