我试图替换"
var name = "C. S. Lewis"
并将其替换为_
并将其转换为"C_S_LEWIS"
这是我尝试的但它将整个事物转换为下划线(_
)
var mystring = "C. S. Lewis";
var find = ".";
var regex = new RegExp(find, "g");
alert(mystring.replace(regex, "_"));
答案 0 :(得分:4)
这是因为点需要在正则表达式中进行转义(除非它是字符类的一部分)。这个表达式应该有效:
var regex = /[.\s]+/g;
alert(mystring.replace(regex, '_'))
它匹配至少一个句点或空格的序列,然后在随后的.replace()
调用中用单个下划线替换。
顺便说一句,这不会将新字符串保存回mystring
。为此,您需要将替换操作的结果分配回同一个变量:
mystring = mystring.replace(regex, '_')
答案 1 :(得分:0)
.
表示'任何角色'。使用\.
获取字面点,这意味着在regex
字符串中,您必须放置\\.
以获得字面下划线,后跟字面点。但是我不确定你为什么要先制作一个字符串 - 你可以这样做:
var find = /\./g;
当然,这不是你想要的 - 你不仅需要任何点,而只需要空格后面的点。那是不同的:
var find = /\.\s+/g;