RegEx for REST url替换

时间:2014-04-14 15:03:41

标签: regex coldfusion

我有这样的网址:

http://www.url.me/en/cats/dogs/potatoes/tomatoes/

我需要替换前两个REST参数来获取结果URL:

http://www.url.me/FIRST/cats/dogs/potatoes/tomatoes/

我试过这个正则表达式\/([^/]+)\/,但它在CF中没有按预期工作:

<cfset ret.REDIRECT = reReplace(currentUrl, "\/([^/]+)\/", "FIRST", "all") />

你对正则表达式和cf代码有什么建议?

谢谢。

1 个答案:

答案 0 :(得分:2)

首先,您不需要在正则表达式中转义/。 (有时你会看到它被转义,例如在JavaScript正则表达式文字中,但这是JS方面被转义,而不是正则表达式。)

然而,即使有了这种改变,它也不会做你想做的事情 - 你将会取代所有其他/合格的部分,而不仅仅是主持部分之后的第一部分。

要做你想做的事,请使用以下内容:

reReplace(CurrentUrl, "^(https?://[^/]+/)[^/]+/", "\1FIRST/")
  • ^将替换锚定在输入的开头。
  • (..)部分捕获协议和主机名,以便可以在替换字符串中使用\1重新插入它们。
  • 最终[^/]+/是抓取请求uri的第一部分并将其替换为替换字符串中的FIRST/

(如果不需要,可以省略尾随/,或使用(?=/)断言它在那里而不需要将其放在替换方。)