正则表达式删除所有非字母数字并用+替换空格

时间:2015-08-19 21:51:15

标签: javascript regex

我希望使用正则表达式尝试从字符串中删除所有非字母数字字符,并用+

替换空格

我想要允许的所有内容基本上都是字母A-Z和+

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

我查看了/\W+/但是这会删除所有空白字符和字母数字字符,而我想在可能的情况下留空,然后用+符号替换。

我已经搜索了一下,但我似乎无法找到一些东西,我希望有人可能对此有任何简单的建议。

示例字符串&期望的结果: Durarara!!x2 Ten - > durarara + x2 + 10

2 个答案:

答案 0 :(得分:26)

这实际上相当简单。

假设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>

答案 1 :(得分:1)

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