将所有非字母数字字符、新行和多个空格替换为一个空格

2022-08-30 01:58:28

我正在寻找一个整洁的正则表达式解决方案来替换

  • 所有非字母数字字符
  • 所有换行符
  • 空白的所有多个实例

具有单个空间


对于那些在家玩的人(以下确实有效))

text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");

我的想法是正则表达式可能足够强大,可以在一个语句中实现这一点。我认为我需要的组件是

  • [^a-z0-9]- 删除非字母数字字符
  • \s+- 匹配任何空间集合
  • \r?\n|\r- 匹配所有新行
  • /gmi- 全局,多行,不区分大小写

但是,我似乎无法以正确的方式设置正则表达式的样式(以下内容不起作用))

text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");

输入

234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5

所需输出

234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5

答案 1

请注意,这留下了下划线。的简短等效项将是\W[^a-zA-Z0-9][\W_]

text.replace(/[\W_]+/g," ");

\W是对单词字符(包括下划线)的速记的否定\w[A-Za-z0-9_]

regex101.com 示例


答案 2

强尼5打败了我。我打算建议使用没有 as in .这也覆盖了空白区域。\W+\stext.replace(/\W+/g, " ")