【问题标题】:Regex for paginated URLs分页 URL 的正则表达式
【发布时间】:2017-08-13 20:27:47
【问题描述】:

我正在尝试制定一个正则表达式模式来匹配 URL。

我目前有这样的 URL 结构

walks/category/catname

walks/category/catname/P12

walks/category/catname/P24

我希望能够匹配它们并替换它们,所以它们最终会像这样

walks/catname

walks/catname/p2

walks/catname/p3

(其中 catname 是一个变量)

目前为止

/walks/category/(.*)/walks/$1

这似乎适用于结果的第一页,但显然不适用于分页的结果。

我有点卡住了,所以任何指针都会非常感激。

谢谢!

【问题讨论】:

  • 分页层不包含在您的(.*) 正则表达式位中并不明显。如果您将/walks/category/catname/P13 之类的分页URL 发送到正则表达式/walks/category/(.*) 中,则应该是这样。如果您不是,并且只发送像/walks/category/catname/ 这样的基本URL,那么这些页面甚至根本就没有正则表达式匹配,所以您不能期望将/walks/category/catname/ 更改为/walks/catname/p10,因为正则表达式在给定 URL 的任何地方都看不到任何关于 /p10 的信息。如果完整的分页 URL 正在被传递给正则表达式,它应该匹配。
  • 这就是我的想法,这就是正在发生的事情。只是基本 URL。不确定如何包含分页变量。
  • 在这种情况下,我建议再问一个更适合您情况的问题。现在的问题是如何将分页 URL 传递到正则表达式中,假设这仍然是您想要使用的方法。

标签: regex url


【解决方案1】:

有点像

查找walks/.*?(/catname.*)
替换walks$1

构造正则表达式以插入 catname 变量
var 正则表达式 = 'walks/.*?(/' + vCatname + '.*)'

之前:

walks/category/catname

walks/category/catname/P12

walks/category/catname/P24

之后:

walks/catname

walks/catname/P12

walks/catname/P24

【讨论】:

  • catname 是一个变化的变量。
  • @Bango - 为变量添加注释。
  • 感谢您的回复,我仍然不太确定这是怎么回事。分页数也需要改变。这不会发生在这里,对吧?
  • 页码?如果您要对结尾进行序列替换,例如P##,则不仅可以选择匹配,而且您需要为 数字排序 逻辑的替换端回调.这一切都取决于运行正则表达式的语言。通常,正则表达式为walks/.*?(/catname.*?)((?:/p\d+)?) 因此,如果捕获组 2 有长度,请在回调中构造替换,使用序列号如if (length $2) replace = 'walks$1' + '/p' + sequence++; 或其他东西。
  • 另外,为了确保分页(或者不,因为它被切换到.*?lazy)在最后匹配,你需要添加EOS锚,比如walks/.*?(/catname.*?)((?:/p\d+)?)$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多