我是JavaScipt的新手,正在测试一个正则表达式,正在研究下面的用例 -
要求 - 将每个字符替换为
请在下面找到我的代码 -
var replacedStr = str.replace(/[^a-zA-Z0-9'.-\[\], ]/g,"#");
str的各种值的输出是 -
str = "hello_";
replacedStr is hello#
_______________________
str = "hello@_";
replacedStr is hello@#
我想知道为什么'@'不会被上面的正则表达式替换。
相同的行为是字符 - underScore,question-Mark,Angular bracket。
请指导。
谢谢,
Vibhav
答案 0 :(得分:2)
在原始正则表达式中,短划线(连字符)被解释为范围:
[^a-zA-Z0-9'.-\[\], ]
这被解释为从点.
到开括号[
的字符范围,其中包含 at符号。如果将连字符移动到否定字符类的最后,正则表达式将按预期工作:
str = "hello@_";
str = str.replace(/[^a-zA-Z0-9'.\[\], -]/g,"#");
console.log(str);
答案 1 :(得分:0)
你的reg-ex中的一些错误你必须把 - ' - '在charachter课堂前(或最后)。
在reg-ex下面会做到这一点
/[^.,\[\]\\'a-zA-Z0-9]/g
您可以使用http://www.regexpal.com/等在线测试人员查看正则表达式
答案 2 :(得分:0)
连字符将被视为范围,因此您需要为其添加转义序列。
str.replace(/[^a-zA-Z0-9'.\-\[\]]/g,"#");