我正在尝试转义2个特殊字符,如果它们出现在单词的开头和冒号之间,则它们是字符串中的*
和?
。例如:
Input: creator*:Joh*n url:*google*
Output: creator\*:Joh*n url:*google*
这是我的JavaScript代码:
var str = 'creator*:Joh*n url:*google*';
var regex = /\b([\w.]*)([\*\?]+)([\w.]*:)/g;
str = str.replace(regex, "$1\\$2$3");
alert(str);
它按我的预期工作。但是,有两个问题:
问题1:如果
*
在单词的开头,则不起作用。Input: *creator:Joh*n url:*google*
Output: *creator:Joh*n url:*google*
Expected result: \*creator:Joh*n url:*google*
问题2:如果有多个
*
,它将不起作用。Input: cre*ato*r:Joh*n url:*google*
Output: cre*ato\*r:Joh*n url:*google*
Expected result: cre\*ato\*r:Joh*n url:*google*
我的图案怎么了?谢谢你的帮助。
最佳答案
您可以通过以下方式进行
function replace(str){
return str.replace(/([*?])(?=[^\s]*:)/g, '\\$1');
}
console.log(replace('creator*:John url:*google*'));
console.log(replace('*creator:John url:*google*'));
console.log(replace('cre*ato*r:John url:*google*'));
console.log(replace('creator*:John url:*google* author:Alice'));
参见regex101 demo
关于javascript - 使用正则表达式在单词开头和冒号之间转义特殊字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46283779/