2010-07-03 15 views
56

i benzer pek çok soru buldum ama bana yardım etmedi ... bu yüzden bu sorun var: Ben maç komut değişken geçirmek nasıl bilmiyorumJavaScript - dize maçında Kullanım değişken

var xxx = "victoria"; 
var yyy = "i"; 
alert(xxx.match(yyy/g).length); 

. Lütfen yardım et. Teşekkür ederim.

+0

tam kopyası [Bir Düzenli İfade JavaScript için bir değişken geçmesine nasıl?] (http://stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression-javascript). Daha fazla ara;) –

+0

Bir şey daha: Bir Regexp'i oluşturmak için bir değişken kullanıyorsanız, değişken regexp'in özel karakterler içeren olabileceğini alınmalıdır umurunda. Örneğin./C++ /: Hiçbir şey bu Firefox'ta sadece * * çalışacak – LotusH

cevap

119

maç işlevi düzenli ifade desen olarak dize hazır kabul etmez de, RegExp nesnesinin kurucu ve String.match işlevine o iletebilirsiniz:

var re = new RegExp(yyy, 'g'); 
xxx.match(re); 

Herhangi bayrakları sen İhtiyaç (/ g gibi) ikinci parametreye gidebilir. neyse benim için

var xxx = "victoria"; 
var yyy = /i/g; 
alert(xxx.match(yyy).length); 
+2

1, bu, ve ödeyecekleri tercih edilen yoldur desen *, örneğin: ' "a123" .match ("\\ d +") [0] === "123";' – CMS

-4
xxx.match(yyy, 'g').length 
+3

repeat' için ve hatta belgelenmiş değildir Geçersiz normal ifade: Eğer "C++" geçmesi halinde, regex derleyici 'SyntaxError şikayet. Belirtim, ['String.prototype.match'] (http://bclary.com/2004/11/07/#a-15.5.4.10) yönteminin yalnızca bir argüman * beklediğini belirtir. @Chris'in önerdiği gibi, 'RegExp' yapıcısının kullanılması tercih edilen yoldur. 'Match' yönteme geçirilen argümanı, içten' RegExp' yapıcı bu değeri kullanılarak çağrılır bir 'RegExp' nesne değilse bir * dizesi kullanabilirsiniz böylece – CMS

6

Sen desen dize

var xxx = "victoria"; 
var yyy = "i"; 
var rgxp = new RegExp(yyy, "g"); 
alert(xxx.match(rgxp).length); 

ise desen dinamik dize değilse RegExp object kullanmak zorunda. sadece "re" örneğini kullanarak bu yaptı:

var analyte_data = 'sample-'+sample_id; 
var storage_keys = $.jStorage.index(); 
var re = new RegExp(analyte_data,'g'); 
for(i=0;i<storage_keys.length;i++) { 
    if(storage_keys[i].match(re)) { 
     console.log(storage_keys[i]); 
     var partnum = storage_keys[i].split('-')[2]; 
    } 
} 
+0

yerine MDN'yi W3Schools kullanmak için bir hayali downvote olsun! https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp – flaky

0

, onu kullanılan görmeye yardımcı olur:

0

Örnek. dize Örneğin

var word='Web Development Tutorial'; 
var vowels='[aeiou]'; 
var re = new RegExp(vowels, 'gi'); 
var arr = word.match(re); 
document.write(arr.length); 
2

içinde sesli harf sayısını bulmak için:

let myString = "Hello World" 
let myMatch = myString.match(/H.*/) 
console.log(myMatch) 

Ya

let myString = "Hello World" 
let myVariable = "H" 
let myReg = new RegExp(myVariable + ".*") 
let myMatch = myString.match(myReg) 
console.log(myMatch) 
ait