我正在尝试创建一个函数,该函数会删除所有特殊字符(包括句点)(撇号除外),因为它们自然是单词的一部分。我所做的正则表达式模式应该删除不符合word
模式的所有内容,或者后跟撇号'
和/或另一个word
:
function removeSpecialCharacters(str) {
return str.toLowerCase().replace(/[^a-z?'?a-z ]/g, ``)
}
console.log(removeSpecialCharacters(`I'm a string.`))
console.log(removeSpecialCharacters(`I'm a string with random stuff.*/_- '`))
console.log(removeSpecialCharacters(`'''`))
如您在代码段中所见,除了可以很好地除去无赖撇号。
如果我在模式中添加诸如[\s'\s]
或[']
之类的内容,则会完全破坏它。为什么这样做,我在这里想念什么?
答案 0 :(得分:2)
使用'\B
替换模式,该模式将匹配并删除不是的撇号,后跟单词字符,例如ab'
或ab'@
,同时保留像ab'c
这样的字符串:
function removeSpecialCharacters(str) {
return str.toLowerCase().replace(/'\B|[^a-z'? ]/g, ``)
}
console.log(removeSpecialCharacters(`I'm a string.`))
console.log(removeSpecialCharacters(`I'm a string with random stuff.*/_- '`))
console.log(removeSpecialCharacters(`'''`))
(您也可以从字符集中删除重复的字符)
答案 1 :(得分:1)
这是一个非常简单的解决方案。要从字符串中删除某些特征,可以通过while循环运行一堆if语句。这使您可以准确选择要删除的符号。
while (increment < string.length)
{
if (string[increment] == "!")
}
delete "!";
}
increment += 1;
}
这只是外观(而不是实际代码)的简单摘要,以使您对正在做的事情有所了解。
答案 2 :(得分:-1)
不知道您的问题是什么,因为我看不到您的尝试。但是,我可以使用它。
function removeSpecialCharacters(str) {
str = str.toLowerCase();
// reduce duplicate apostrophes to single
str = str.replace(/'+/g,`'`);
// get rid of wacky chars
str = str.replace(/[^a-z'\s]/g,'');
// replace dangling apostrophes
str = str.replace(/(^|\s)'(\s|$)/g, ``);
return str;
}
console.log(removeSpecialCharacters(`I'm a string.`))
console.log(removeSpecialCharacters(`I'm a string with random stuff.*/_- '`))
console.log(removeSpecialCharacters(`'''`))
console.log(removeSpecialCharacters(`regex 'til i die`))