捕获源字符串中不存在的子字符串

时间:2013-03-15 18:56:23

标签: regex string url-rewriting pattern-matching

我想要正则表达式搜索并替换如下:

  • 输入字符串以imagesvideosfriends结尾
    • 输出字符串包含匹配的后缀
  • 否则
    • 输出字符串包含后缀profile

输入/输出示例:

  • /john-smith-images - > /user-images
  • /john-smith-videos - > /user-videos
  • /john-smith - > /user-profile

我试过这个正则表达式,它捕获后缀,如果存在的话:

/.+?(images|videos|friends)?$/

仅限于一个正则表达式 仅正则表达式 。我需要在mod_rewrite / IIRF / IIS URL重写中使用它。

3 个答案:

答案 0 :(得分:0)

不考虑使用.replace(),而是考虑在条件内使用.match()或.test(),并分别处理不匹配的情况。

答案 1 :(得分:0)

尝试一下:

text.replace(/[\w-]+(?=(images|videos|friends))/, 'user-').replace(/[\w-]+-(?!(images|videos|friends))\w*/, 'user-profile')

答案 2 :(得分:0)

使用String#replace和回调,如下所示:

var regexp = /.+?(images|videos|friends|)$/;
function cb ($0, $1) {
   r = $1 ? $1 : 'profile';
   return '/user-' + r;
}
console.log("/john-smith-images".replace(regexp, cb));
console.log("/john-smith-videos".replace(regexp, cb));
console.log("/john-smith".replace(regexp, cb));

<强>输出:

/user-images
/user-videos
/user-profile

现场演示:http://ideone.com/MVRcku