【问题标题】:How to make regex stop at a certain character如何使正则表达式在某个字符处停止
【发布时间】:2015-05-20 11:20:23
【问题描述】:

我需要匹配以下路径

var path = '/posts/type/my-type';

到以下路线:

var route = '/posts/type/:type';

为此,首先,我将route 变量设为正则表达式:

var regroute = route.replace(/\:[a-zA-Z]+/, '(.*)');

然后从中创建一个正则表达式:

var regexp = new RegExp('^' + regroute + '\/?$');

当我匹配路由路径时,匹配有效。但是,当它看到“/”字符时,它存在不停止匹配的问题。所以,如果我有一个路径:'/posts/type/my-type/hello-world/yes',匹配仍然显示为真。或者,如果路径末尾有斜线 (/posts/type/my-type/),my-type/ 会匹配。

这是一个代码笔:http://codepen.io/anon/pen/gpwbxK?editors=001

奇怪的是,当我在 PHP 中设置相同的正则表达式时,一切都很好,但我认为这是因为在 PHP 中,我需要转义正则表达式中的所有斜杠。

【问题讨论】:

  • var regexp = new RegExp('^' + regroute + '/?$');
  • @AvinashRaj,我建议将此作为答案发布,否则我会
  • @AvinashRaj 我不敢相信我没有想到这一点。谢谢!

标签: javascript regex


【解决方案1】:

将您的regroute 更改为以下内容,以便它将停在/

var regroute = route.replace(/\:[a-zA-Z]+/, '([^\/]*)');

http://codepen.io/anon/pen/NqRPYJ

【讨论】:

  • 尽管我想沿用我以前的想法,但我更喜欢这个,主要是因为它允许我匹配路线中的多个变量。谢谢!
  • @Karthik:每月记录! :) 恭喜!你睡觉吗? :)
  • 恭喜你们。你们两个人现在正在做我的工作.. :-)
  • @stribizhev 谢谢你,也恭喜你.. 是的,我每天睡8-9 小时:P .. 顺便说一句.. 什么是每月记录? :O
  • @AvinashRaj:别忘了还有 vks、hwnd、Fede、Casimir et Hippolyte 等。Karthik,我指的是你个人资料中“活动”选项卡上的声誉 :)
猜你喜欢
  • 2018-11-30
  • 2015-08-11
  • 1970-01-01
  • 2017-11-24
  • 2017-12-06
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多