Answers:
您应该使用带有单个正则表达式的字符串替换功能。假设使用特殊字符,您的意思不是字母,这是一种解决方案:
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的函数,并在JavaScript引擎中使用了良好的UTF-8支持。如果符号大写和小写相等,则该想法很简单,即它是一个特殊字符。唯一的例外是空格。
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
在第一个函数中声明。
点(。)可能不被认为是特殊的。我在Mozfet和Seagull的答案中添加了OR条件:
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代码进行比较,然后重新生成新的字符串。