Antworten:
Sie sollten die Funktion zum Ersetzen von Zeichenfolgen mit einem einzelnen regulären Ausdruck verwenden. Angenommen, mit Sonderzeichen meinen Sie alles, was kein Buchstabe ist. Hier ist eine Lösung:
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, "");
Hinweis, es gibt ein Leerzeichen zwischen 0-9 und]
Sie können dazu die Zeichen angeben, die Sie entfernen möchten:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
Um alle Zeichen außer Zahlen und Buchstaben zu ändern, versuchen Sie alternativ:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
und whitespaces
in Zeichenfolge.text().replace(/[ ()]/g, '')
Die erste Lösung funktioniert für kein UTF-8-Alphabet. (Es wird Text wie Привіт schneiden). Ich habe es geschafft, eine Funktion zu erstellen, die RegExp nicht verwendet und eine gute UTF-8-Unterstützung in der JavaScript-Engine verwendet. Die Idee ist einfach, wenn ein Symbol in Groß- und Kleinbuchstaben gleich ist und es sich um ein Sonderzeichen handelt. Die einzige Ausnahme gilt für Leerzeichen.
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;
}
Update: Bitte beachten Sie, dass diese Lösung nur für Sprachen mit Klein- und Großbuchstaben funktioniert. In Sprachen wie Chinesisch funktioniert dies nicht.
Update 2: Ich bin zur ursprünglichen Lösung gekommen, als ich an einer Fuzzy-Suche gearbeitet habe. Wenn Sie auch versuchen, Sonderzeichen zu entfernen, um die Suchfunktion zu implementieren, gibt es einen besseren Ansatz. Verwenden Sie eine beliebige Transliterationsbibliothek, die nur Zeichenfolgen aus lateinischen Zeichen erzeugt, und dann entfernt der einfache Regexp alle Sonderzeichen. (Dies funktioniert auch für Chinesisch und Sie erhalten auch Nebeneffekte, wenn Sie Tromsø
== machen Tromso
).
Ich kenne kein JavaScript, aber ist es nicht möglich, Regex zu verwenden?
So etwas [^\w\d\s]
passt zu nichts anderem als Ziffern, Zeichen und Leerzeichen. Es wäre nur eine Frage, die Syntax in JavaScript zu finden.
Ich habe Seaguls sehr kreative Lösung ausprobiert, aber festgestellt, dass Zahlen auch als Sonderzeichen behandelt werden, was nicht meinen Anforderungen entspricht. Hier ist meine (ausfallsichere) Optimierung von Seaguls Lösung ...
//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
in Ihrer ersten Funktion zu deklarieren .
Versuchen Sie, diesen zu verwenden
var result= stringToReplace.replace(/[^\w\s]/gi, '')
hier steht ^ carat für die Negation \ w für [a-zA-Z0-9_] Wortzeichen und \ s für Leerzeichen / [] / gi für global
Punkt (.) kann nicht als besonders angesehen werden. Ich habe der Antwort von Mozfet & Seagull eine ODER-Bedingung hinzugefügt:
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));
Wessen Sonderzeichen Sie aus einer Zeichenfolge entfernen möchten, erstellen Sie eine Liste davon und verwenden Sie dann die Funktion zum Ersetzen von Javascript, um alle Sonderzeichen zu entfernen.
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
Oder Sie können eine Schleife für eine ganze Zeichenfolge ausführen und ein einzelnes Zeichen mit dem ASCII-Code vergleichen und eine neue Zeichenfolge neu generieren.