2016-04-09 12 views
1

, dördüncü argümanı o numaraya oluşum sayısını sınırlar: ÖrneğinJavaScript'teki olay sayısını nasıl tanımlarım? PHP

mixed preg_replace (mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]) 

:

$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" 
*/ 

nasıl JavaScript yapabilirsiniz?

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>
yardımcı olur :)

+1

JS'deki varsayılan davranış budur. Her şeyi değiştirmek isterseniz, * global * flag - '/ s/g' – ClasG

+0

@ClasG 'ı eklemelisiniz. JS'de g' bayrağı ile tanıdık geliyorum, ama nasıl değişebilirim? belirli sayı? örneğin sadece 3 ilk olay. – stack

+0

JS'de, bir şeyi bir kez değiştirmek için "g" bayrağı olmadan bir normal ifadeyi kullanabilirsiniz: '" bu bir testtir. .replace (/ s /, "S") '. Eğer 'g' bayrağı kullanırsanız, tüm oluşumları değiştirir. _n_ kere yerine geçmenin kolay bir yolunun farkında değilim. – Xufox

cevap

1

Sen değiştirmek yöntemin dışında bir sayaç başlatabilirsiniz:

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

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

Sadece değiştirmeyi sayıyor ve eğer 2'den fazla ise, değiştirmeyi keser.

Bkz. JS Bin numaralı telefon.

+0

Sadece bir soru, bu satırda 'x' nedir' return ++ counter> limit? x: 'S'; '? Tanımlamadınız, yani ne var? – stack

+0

'x', arg (macthed metin) –

+0

@stack olarak alındı. Onu 'eşleştir' olarak değiştirdim –

1

bu deneyin Umut: (aşağıda işlevi yaptığı gibi )

İlgili konular