Odpowiedzi:
Powinieneś użyć funkcji zamiany napisów z pojedynczym wyrażeniem regularnym. Zakładając, że przez znaki specjalne masz na myśli wszystko, co nie jest literą, oto rozwiązanie:
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, "");
powiadomienia, jest spacja między 0-9 a]
Możesz to zrobić, określając znaki, które chcesz usunąć:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
Alternatywnie, aby zmienić wszystkie znaki z wyjątkiem cyfr i liter, spróbuj:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
i whitespaces
w łańcuchu.text().replace(/[ ()]/g, '')
Pierwsze rozwiązanie nie działa dla żadnego alfabetu UTF-8. (Wytnie tekst, taki jak Привіт). Udało mi się stworzyć funkcję, która nie korzysta z RegExp i korzysta z dobrej obsługi UTF-8 w silniku JavaScript. Pomysł jest prosty, jeśli symbol jest równy wielkimi i małymi literami, jest to znak specjalny. Jedyny wyjątek dotyczy białych znaków.
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;
}
Aktualizacja: Należy pamiętać, że to rozwiązanie działa tylko w językach, w których występują małe i duże litery. W językach takich jak chiński to nie zadziała.
Aktualizacja 2: doszedłem do oryginalnego rozwiązania, kiedy pracowałem nad wyszukiwaniem rozmytym. Jeśli próbujesz również usunąć znaki specjalne w celu zaimplementowania funkcji wyszukiwania, istnieje lepsze podejście. Użyj dowolnej biblioteki transliteracji, która utworzy łańcuch tylko ze znaków łacińskich, a proste Regexp wykona całą magię usuwania znaków specjalnych. (To zadziała również dla języka chińskiego, a także otrzymasz dodatkowe korzyści, wykonując Tromsø
== Tromso
).
Nie znam JavaScript, ale czy nie jest możliwe użycie wyrażenia regularnego?
Coś takiego jak [^\w\d\s]
będzie pasować do wszystkiego oprócz cyfr, znaków i spacji. Byłoby tylko kwestią znalezienia składni w JavaScript.
Wypróbowałem bardzo kreatywne rozwiązanie firmy Seagul, ale okazało się, że traktuje cyfry również jako znaki specjalne, co nie odpowiada moim potrzebom. Oto moja (bezpieczna) modyfikacja rozwiązania Seagul ...
//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
w swojej pierwszej funkcji.
Spróbuj użyć tego
var result= stringToReplace.replace(/[^\w\s]/gi, '')
tutaj ^ karat oznacza negację \ w dla [a-zA-Z0-9_] znaków słownych i \ s dla spacji / [] / gi dla globalnego
kropka (.) nie może być uznana za specjalną. Dodałem warunek LUB do odpowiedzi Mozfeta i Seagull:
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));
Czyje znaki specjalne chcesz usunąć z ciągu, przygotuj ich listę, a następnie użyj funkcji zamiany javascript, aby usunąć wszystkie znaki specjalne.
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
lub możesz uruchomić pętlę dla całego ciągu i porównać pojedynczy znak z kodem ASCII i ponownie wygenerować nowy ciąg.