我希望使用正则表达式尝试从字符串中删除所有非字母数字字符,并用+
替换空格我想要允许的所有内容基本上都是字母A-Z和+
这是专门准备字符串成为URL的一部分,因此需要+符号而不是空格。
我查看了/\W+/
但是这会删除所有空白字符和字母数字字符,而我想在可能的情况下留空,然后用+符号替换。
我已经搜索了一下,但我似乎无法找到一些东西,我希望有人可能对此有任何简单的建议。
示例字符串&期望的结果:
Durarara!!x2 Ten
- > durarara + x2 + 10
答案 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, "");