Ответы:
Вы должны использовать функцию замены строки с одним регулярным выражением. Предполагая под специальными символами, вы имеете в виду все, что не буква, вот решение:
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, но разве это невозможно с помощью регулярных выражений?
Нечто подобное [^\w\d\s]
будет соответствовать чему угодно, кроме цифр, символов и пробелов. Было бы просто вопросом найти синтаксис в JavaScript.
Я попробовал очень креативное решение Seagul, но обнаружил, что оно рассматривает числа также как специальные символы, которые не соответствуют моим потребностям. Итак, вот мой (отказоустойчивый) твик решения 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 и создать новую строку.