我是 JavaScipt 新手,正在测试正则表达式,并且正在处理以下用例 -
要求 - 将不在下面列表中的每个字符替换为“#”-
- 数量
- 字符(大写或小写)
- 除 -> 逗号、点、方括号、正斜杠、单引号之外的任何特殊字符
请在下面找到我的代码 -
var replacedStr = str.replace(/[^a-zA-Z0-9'.-\[\], ]/g,"#");
str 的各种值的输出是 -
str = "hello_";
replacedStr is hello#
_______________________
str = "hello@_";
replacedStr is hello@#
我想知道为什么上面的正则表达式没有替换“@”。
字符的行为相同 - 下划线、问号、尖括号。
请指导。
谢谢
维巴夫
最佳答案
在您的原始正则表达式中,您的破折号(连字符)被解释为范围:
[^a-zA-Z0-9'.-\[\], ]
这被解释为从点 .
到左括号 [
的字符范围,其中包括 at 符号。如果将连字符移至否定字符类的最末尾,则正则表达式将按预期工作:
str = "hello@_";
str = str.replace(/[^a-zA-Z0-9'.\[\], -]/g,"#");
console.log(str);
关于JavaScript 正则表达式不替换 '@' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44321620/