正则表达式:去除所有非字母数字字符并将空格替换为+

15

我想使用正则表达式尝试从字符串中删除所有非字母数字字符,并将空格替换为 + 号。

我只想允许基本的字母 A-Z 和 + 号。

这是为了准备将该字符串成为 URL 的一部分,因此需要 + 符号而不是空格。

我已经查看了 /\W+/,但是它会删除所有空格和字母数字字符,而我希望如果可能的话保留空格,以便稍后用 + 号替换。

我已经搜索了一下,但好像找不到什么,我希望有人能对此提出简单的建议。

示例字符串及所需结果: Durarara!!x2 Ten -> durarara+x2+ten

2个回答

47
这其实很简单。假设str是你要清理的字符串:
str = str.replace(/[^a-z0-9+]+/gi, '+');
^ 表示“不在这个字符列表中的任何内容”。 [...] 组后面的 + 表示“一个或多个”。/gi 表示“替换所有找到的内容,不区分大小写”。
因此,任何非字母、数字或“+”的字符序列将被转换为单个“+”。
要删除括号内的子字符串(如评论中所请求的),请先进行此替换。
str = str.replace(/\(.+?\)/g, '');

function replacer() {

  var str = document.getElementById('before').value.
    replace(/\(.+?\)/g, '').
    replace(/[^a-z0-9+]+/gi, '+');

  document.getElementById('after').value = str;
}

document.getElementById('replacem').onclick = replacer;
<p>Before:
  <input id="before" value="Durarara!!x2 Ten" />
</p>

<p>
  <input type="button" value="replace" id="replacem" />
</p>

<p>After:
  <input id="after" value="" readonly />
</p>


谢谢!这已经接近完成了,只有一个问题,它也用加号替换括号,例如:Arslan Senki (TV) 变成 Arslan+Senki++TV+,有没有办法不添加 + 而是完全删除“(TV)”?我从来不擅长正则表达式,感谢您的帮助! - sgript
在进行上述替换之前,添加另一行代码:str = str.replace(/\(.+?\)/g, ''); - Paul Roub
这是最好的答案,我修改了第二个正则表达式为/\.|\(.+?\)/g以删除句号和括号,应该提到一下,我的错!非常感谢。 - sgript

2
 str = str.replace(/\s+/g, '+');
 str  = str.replace(/[^a-zA-Z0-9+]/g, "");
  • 第一行将所有空格替换为+符号
  • 第二行删除所有非字母数字和非+符号。

1
这将删除第一行中的所有非字母数字字符。第二行没有剩余的内容可以用“+”替换。 - Paul Roub
如果您在发布代码的同时能够描述您的方法,那就太棒了! :) - Barett
OP想要将每个空格或非字母数字符号替换为一个加号“+”....durarara+x2+ten是期望的结果.... - sinisake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接