Відповіді:
Вам слід скористатись функцією заміни рядків, використовуючи один регулярний вираз. Маючи на увазі спеціальних символів, ви маєте на увазі все, що не письмо, ось рішення:
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, "");
повідомлення, пробіл між 0-9 та]
Ви можете зробити це, вказавши символів, які потрібно видалити:
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
Крім того, щоб змінити всі символи, крім цифр і літер, спробуйте:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
і whitespaces
рядок.text().replace(/[ ()]/g, '')
Перше рішення не працює для жодного алфавіту UTF-8. (Він виріже такий текст, як Привіт). Мені вдалося створити функцію, яка не використовує RegExp і використовує гарну підтримку UTF-8 в механізмі JavaScript. Ідея проста, якщо символ рівний великим, а малі - це особливий символ. Єдиний виняток зроблений для пробілів.
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;
}
Оновлення: Зверніть увагу, що це рішення працює лише для мов, де є малі та великі літери. У таких мовах, як китайська, це не працює.
Оновлення 2: Я прийшов до оригінального рішення, коли працював над нечітким пошуком. Якщо ви також намагаєтеся видалити спеціальні символи для реалізації функцій пошуку, є кращий підхід. Використовуйте будь-яку бібліотеку транслітерації, яка видасть вам рядки лише з латинських символів, і тоді простий Regexp виконає всю магію видалення спеціальних символів. (Це також буде працювати для китайців, і ви також отримаєте побічні переваги, зробивши Tromsø
== Tromso
).
Я не знаю JavaScript, але чи це неможливо за допомогою regex?
Щось подібне [^\w\d\s]
відповідатиме будь-чому, окрім цифр, символів та пробілів. Було б лише питання знайти синтаксис у JavaScript.
Я спробував дуже креативне рішення 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
у своїй першій функції.
Спробуйте скористатися цим
var result= stringToReplace.replace(/[^\w\s]/gi, '')
тут ^ карат - це заперечення \ w для [a-zA-Z0-9_] символів слова та \ s для простору / [] / gi для глобального
крапка (.) не може вважатися особливою. Я додав умову АБО до відповіді Мозфета та Чайки:
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));
Чиї спеціальні символи ви хочете видалити з рядка, підготуйте їх список, а потім користувачу функцію заміни javascript, щоб видалити всі спеціальні символи.
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
або ви можете запустити цикл для цілого рядка і порівняти один-єдиний символ з кодом ASCII і відновити новий рядок.