M.i*_*i.T 7 javascript regex jquery
我定义中的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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是当\字符发送到函数结果的字符串无效时.
我尝试\在定义模式中使用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
Run Code Online (Sandbox Code Playgroud)
var pattern_string = "-|_|@|#|\\$|\\\\";
Run Code Online (Sandbox Code Playgroud)
你必须为模式转义一次斜杠,所以它会尝试匹配文字字符:
\\
Run Code Online (Sandbox Code Playgroud)
然后,再次为字符串文字转义每个斜杠:
"\\\\"
Run Code Online (Sandbox Code Playgroud)
另请注意,我为此添加了一个转义符$.为了按字母顺序匹配美元符号,它也需要进行转义,因为它通常代表"行/字符串结尾" 的锚点.
您还可以使用正则表达式文字来避免字符串,仅使用模式所需的转义序列:
var pattern = /-|_|@|#|\$|\\/gi;
Run Code Online (Sandbox Code Playgroud)
而且,由于您只匹配单个字符,因此您可以使用字符类而不是替换字符:
var pattern = /[-_@#\$\\]/gi;
Run Code Online (Sandbox Code Playgroud)
(请注意-这里的位置.它可以作为类中的第一个字符,但是当放在中间时可以表示一系列字符.您也可以将其转义以确保它不代表范围.)