'In Dize JavaScript bir sürümü var.() karakterlerden oluşan normal ifadeler için izin verir?
Javascript, orada Dize eşdeğerdir.() adres bilgisi hala ikinci bir parametre verirken ilk parametre bir dize yerine normal bir ifade alır ?
Gibi bir şey yapmak istiyorum
str.indexOf(/[abc]/ , i);
ve
str.lastIndexOf(/[abc]/ , i);
Dize Süre.() arama beni ikinci bir argüman belirtmek için izin vermez bir parametre olarak bir düzenli ifade alır!
Düzenleme:< / ^ br . Bu sunulan tüm çözümleri test etmek için küçük bir test işlevi yazdım aslında düşündüğümden daha zor çıktı... regexİndexOf düşünür ve regexLastİndexOf String nesnesine eklenmiş.
function test (str) {
var i = str.length 2;
while (i--) {
if (str.indexOf('a',i) != str.regexIndexOf(/a/,i))
alert (['failed regexIndexOf ' , str,i , str.indexOf('a',i) , str.regexIndexOf(/a/,i)]) ;
if (str.lastIndexOf('a',i) != str.regexLastIndexOf(/a/,i) )
alert (['failed regexLastIndexOf ' , str,i,str.lastIndexOf('a',i) , str.regexLastIndexOf(/a/,i)]) ;
}
}
ve aşağıdaki gibi en az bir karakter regexp için, sonucu adres bilgisi kullansak aynı olduğundan emin olmak için test ediyorum
//Xes arasında bir bakın< / ^ br . ('') xxx; . test ^ / ^ br . ('') axx; . test ^ / ^ br . ('') xax; . test ^ / ^ br . ('') xxa; . test ^ / ^ br . ('') sunduğunu; . test ^ / ^ br . ('') xaa; . test ^ / ^ br . ('') aax; . test ^ / ^ br . ('aaa'); . test
CEVAP
Bu yaklaşımlar zaten bahsedilen bir kaç (adres bilgisi belli ki oldukça basittir) birleştirerek, bu hile yapacak işlevleri olduğunu düşünüyorum:
String.prototype.regexIndexOf = function(regex, startpos) {
var indexOf = this.substring(startpos || 0).search(regex);
return (indexOf >= 0) ? (indexOf (startpos || 0)) : indexOf;
}
String.prototype.regexLastIndexOf = function(regex, startpos) {
regex = (regex.global) ? regex : new RegExp(regex.source, "g" (regex.ignoreCase ? "i" : "") (regex.multiLine ? "m" : ""));
if(typeof (startpos) == "undefined") {
startpos = this.length;
} else if(startpos < 0) {
startpos = 0;
}
var stringToWorkWith = this.substring(0, startpos 1);
var lastIndexOf = -1;
var nextStop = 0;
while((result = regex.exec(stringToWorkWith)) != null) {
lastIndexOf = result.index;
regex.lastIndex = nextStop;
}
return lastIndexOf;
}
Belli ki, yerleşik Dize nesne değiştirme çoğu insan için kırmızı bayrak göndermek istemez. ama bu o kadar da önemli değil bir zaman olabilir; sadece bunun farkında olmak.
< / ^ hr .
GÜNCELLEME: o lastIndexOf()
şimdi taklit etmek için regexLastIndexOf()
Düzenlenebilir. Bana eğer yine başarısız olursa haber ver ve hangi şartlar altında lütfen.
< / ^ hr .
GÜNCELLEME: tüm testleri bu sayfa üzerinde yorumlarda bulundu, ve benim kendi Geçer. Tabi ki, kurşun geçirmez olduğu anlamına gelmez. Herhangi bir geribildirim takdir.
Dizideki karakterlerden oluşan düzeltm...
Normal ifadenin yalnızca alfasayısal i...
Nasıl JavaScript ile boş bir dize için...
Nasıl bir dize olarak adını aldığımda ...
Eğer bir dize geçerli bir sayı olup ol...