Yanıtlar:
Dize değiştirme işlevini tek bir normal ifadeyle kullanmalısınız. Özel karakterlere göre, mektup olmayan bir şey demek istersiniz, işte bir çözüm:
const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));
str.replace(/[^a-zA-Z0-9]/g, "")
str.replace(/[^a-zA-Z0-9 ]/g, "");
bildirime ihtiyacınız var 0-9 ve]
Kaldırmak istediğiniz karakterleri belirterek bunu yapabilirsiniz:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
Alternatif olarak, sayılar ve harfler dışındaki tüm karakterleri değiştirmek için şunları deneyin:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
ve whitespaces
dize.text().replace(/[ ()]/g, '')
İlk çözüm herhangi bir UTF-8 alfabesi için çalışmaz. (Привіт gibi metinleri keser). RegExp kullanmayan ve JavaScript motorunda iyi UTF-8 desteği kullanan bir işlev oluşturmayı başardım. Bir sembol büyük harf ve küçük harf özel ise, basit bir fikirdir. Tek istisna boşluk için yapılır.
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
if(lower[i] != upper[i] || lower[i].trim() === '')
res += str[i];
}
return res;
}
Güncelleme: Lütfen bu çözümün yalnızca küçük ve büyük harflerin bulunduğu diller için çalıştığını unutmayın. Çince gibi dillerde, bu işe yaramaz.
Güncelleme 2: Bulanık bir arama üzerinde çalışırken orijinal çözüme geldim. Arama işlevini uygulamak için özel karakterleri de kaldırmaya çalışıyorsanız, daha iyi bir yaklaşım vardır. Size yalnızca Latin karakterlerinden dize üretecek herhangi bir harf çevirisi kitaplığı kullanın ve daha sonra basit Regexp özel karakterleri kaldırmanın tüm sihrini yapacaktır. (Bu Çince için de işe yarayacak ve Tromsø
== yaparak yan avantajlar elde edeceksiniz Tromso
).
JavaScript bilmiyorum, ama regex kullanmak mümkün değil mi?
Gibi bir [^\w\d\s]
şey rakamlar, karakterler ve boşluklardan başka bir şeyle eşleşecektir. Sözdizimini JavaScript'te bulmak sadece bir soru olurdu.
Seagul'un çok yaratıcı çözümünü denedim, ancak sayıları da ihtiyaçlarıma uygun olmayan özel karakterler olarak gördüm. İşte Seagul'un çözümünde (başarısız) ince ayarım ...
//return true if char is a number
function isNumber (text) {
if(text) {
var reg = new RegExp('[0-9]+$');
return reg.test(text);
}
return false;
}
function removeSpecial (text) {
if(text) {
var lower = text.toLowerCase();
var upper = text.toUpperCase();
var result = "";
for(var i=0; i<lower.length; ++i) {
if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
result += text[i];
}
}
return result;
}
return '';
}
reg
İlk işlevinizde beyan etmeyi unuttunuz .
Bunu kullanmaya çalışın
var result= stringToReplace.replace(/[^\w\s]/gi, '')
burada ^ karat, [a-zA-Z0-9_] kelime karakterleri için \ w ve boşluk için \ s / global için [] / gi içindir.
nokta (.) özel kabul edilemez. Mozfet'in ve Seagull'ın cevabına OR koşulu ekledim:
function isNumber (text) {
reg = new RegExp('[0-9]+$');
if(text) {
return reg.test(text);
}
return false;
}
function removeSpecial (text) {
if(text) {
var lower = text.toLowerCase();
var upper = text.toUpperCase();
var result = "";
for(var i=0; i<lower.length; ++i) {
if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
result += text[i];
}
}
return result;
}
return '';
}
const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' #
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) == '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');
console.log(replaceString.match(/(?<=->).*?(?=<-)/g));
Bir dizeden kaldırmak istediğiniz özel karakterleri, bir listesini hazırlayın ve daha sonra tüm özel karakterleri kaldırmak için kullanıcı javascript değiştirme işlevi.
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
veya bütün bir dize için döngü çalıştırabilir ve tek bir karakteri ASCII kodu ile karşılaştırabilir ve yeni bir dize oluşturabilirsiniz.