我的JavaScript替换所有定义的函数-
,_
,@
,#
,$
和\
(他们是可能的分隔符)与/
(有效分隔符)。
我的目标是像"1394_ib_01#13568"
转换为"1394/ib/01/13568"
function replaceCharacters(input) {
pattern_string = "-|_|@|#|$|\u005C"; // using character Unicode
//pattern_string = "-|_|@|#|$|\"; // using original character
//pattern_string = "-|_|@|#|$|\\"; // using "\\"
//pattern_string = "\|-|_|@|#|$"; // reposition in middle or start of string
pattern = new RegExp(pattern_string, "gi");
input = input.replace(pattern, "/");
return input;
}
我的问题是,带有\
字符的字符串发送到函数结果无效。
我尝试\
在定义模式中使用Unicode ,或者使用\\\
代替它。我也替换了它在模式字符串中的位置。但是在任何一种情况下,问题都无法解决,浏览器返回无效结果或其他错误,例如:
SyntaxError: unterminated parenthetical ---> in using "\u005C"
SyntaxError: \ at end of pattern ---> in using "\\"
Invalid Result: broken result in 2 Line or replace with undefined character based on input string (the character after "\" determine result)
---> in reposition it in middle or start of pattern string
var pattern_string = "-|_|@|#|\\$|\\\\";
您必须为模式避免一次斜杠,因此它将尝试匹配文字字符:
\\
然后,再次为字符串文字转义每个斜杠:
"\\\\"
另请注意,我为添加了转义符$
。要从字面上匹配美元符号,也必须对其进行转义,因为它通常代表“行/字符串结尾”的锚点。
您还可以使用正则表达式文字来避免使用字符串,仅使用模式必需的转义序列:
var pattern = /-|_|@|#|\$|\\/gi;
var pattern = /[-_@#\$\\]/gi;
(请注意-
这里的位置。可以作为类中的第一个字符使用,但是放在中间时可以表示一个字符范围。也可以对其进行转义以确保它不表示范围。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句