删除除“一些”撇号外的所有特殊字符

时间:2019-08-24 21:55:11

标签: javascript regex

我正在尝试创建一个函数,该函数会删除所有特殊字符(包括句点)(撇号除外),因为它们自然是单词的一部分。我所做的正则表达式模式应该删除不符合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][']之类的内容,则会完全破坏它。为什么这样做,我在这里想念什么?

3 个答案:

答案 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`))