2014-04-14 30 views
1

我有这样的一个网址:正则表达式REST URL换人

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") /> 

你有什么建议,都为雷杰x和cf代码?

谢谢。

+1

注意的*所有* ...它取代每一次出现。 –

回答

2

首先,你不需要在正则表达式中转义/。 (有时候你会看到它逃脱,如在JavaScript正则表达式文字,但那是JS侧被转义,而不是正则表达式。)

然而,即使有这种变化,它不会做你想要什么 - 你会在主持人部分之后,替换所有其他/限定的部分而不仅仅是第一部分。

做你想做什么,可以使用这样的:

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

(你可以省略后面/如果它不是必需的,或使用(?=/)断言它的存在,而无需把它的替代方。)

+0

不起作用,打印相同的字符串。

+0

对不起,我正在愚蠢 - 你不想''' - 会在一瞬间更新。 –

+0

好的,更新的版本 - 让我知道如果有任何问题。 –