有人可以解释为什么下面的replace()不会取代"我的"
$(function() {
  var str = "put image in my gallery";
  str = str.replace(/ my | in /g, " ");
});
有一个的jsfiddle 这里.
谢谢.
因为匹配器已经先进了.匹配不能重叠,所以后面的空格in不能用来匹配前面的空格my.
这是破旧,|代表匹配器的位置:
'put image| in my gallery' //found the first space
'put image| in |my gallery' //completed a match
'put image |my gallery' //replaced the match with a " "
'put image |my gallery' //fails to match the required space before "my"
解决方法包括进行2次运行(.replace()在@ alfasin的答案中执行两次),或者使用\b锚点来匹配单词边界而不是空格(@ Grim的解决方案).
这是我的替代解决方案,具有单个替换操作(在匹配的单词后面假定一个尾随空格):
'put image in my gallery'.replace(/\b(?:my|in) /g, '');
//'put image gallery'
\b是一个零宽度断言,也就是说,它匹配单词字符(\w)和非单词字符(\W),这样匹配就不会重叠,并且在执行替换后没有多余的空格.当然,这只是为了给你一个想法,具体的用例(例如涉及标点符号)将需要更专业的正则表达式.