2016-04-09 8 views
1

、四番目の引数は、その番号に出現数を制限

$string = 'this is a test'; 
$pattern = '/s/'; 
echo preg_replace($pattern, 'S', $string, 1); 
//=> thiS is a test 

/* If I remove that 1 which is the last argument in preg_replace, the output will be: 
* "thiS iS a teSt" 
*/ 

私はJavaScriptでこれを行うことができますどのように?

+1

JSのデフォルト動作です。すべてを交換したい場合は、グローバルフラグ* -s/gを追加する必要があります。 – ClasG

+0

@ClasGはい、JSの 'g'フラグに精通していますが、どうすれば交換を制限できますか特定の番号?例えばわずか3回の最初の発生。 – stack

+0

JSでは、 ''これはテスト ".replace(/ s /、" S ")'のように、何かを置き換えるために 'g'フラグなしで正規表現を使うことができます。 'g'フラグを使うと、それはすべての出現を置き換えます。 _n_回まで交換する簡単な方法はわかりません。 – Xufox

答えて

1

(私は以下の機能に行ったよう)あなたは置き換える方法の外にカウンタを起動することができます。

function replace($pattern, $replacement, $subject, $limit) { 
 
    var counter = 0; 
 
    return $subject.replace($pattern, function(match) { 
 
     return ++counter > $limit ? match : $replacement; 
 
    }); 
 
} 
 

 
var $string = 'this is a test'; 
 
var $pattern = /s/g; 
 

 
O.innerHTML = replace($pattern, 'S', $string, 1) + '\n' 
 
       + replace($pattern, 'S', $string, 2);
<pre id=O>

はそれが役に立てば幸い:)

+0

ちょうど1つの質問ですが、この行の 'x'は' return ++ counter>の制限ですか? x: 'S'; '?あなたはそれを定義していないので、何が入っていますか? – stack

+0

'x'はarg(文字通りのテキスト) –

+0

@stackとして扱われます。私はそれを「マッチ」に変更した –

1

これを試してみてください。

var string = "this is test" 
    ,pattern = /s/g 
    ,replacement = "S" 
    ,maxReplacements = 2 
    ,i = 0 

console.log(string.replace(pattern, match=> i++ >= maxReplacements ? match : replacement)) 

これは単に置換を数え、2以上の場合は置換を停止します。

JS Binのデモをご覧ください。

関連する問題