如何只选择匹配中的某个部分?

时间:2013-07-25 19:08:18

标签: javascript regex

我有以下字符串。

/v/dkdkd-akdoa?

我想替换dkdkd-akdoa

我的替换方法看起来像

string.replace("v\/(.+)\?", "replace")

但它也取代了v/。如何仅替换dkdkd-akdoa

3 个答案:

答案 0 :(得分:5)

请尝试以下代码:

> '/v/dkdkd-akdoa?'.replace(/(v\/).+\?/, '$1replace')
"/v/replace"

如果你想保持?

> '/v/dkdkd-akdoa?'.replace(/(v\/).+(?=\?)/, '$1replace')
"/v/replace?"

$1引用第一组((v\/)

答案 1 :(得分:3)

非常简单

string.replace(/v\/.+\?/, "v/replace");

如果第一部分未知,您可以捕获并替换它:

string.replace(/(v\/).+\?/, "$1replace");

显然,在第二个例子中,因为v/是常数而已知。您可能会用/^(.*?/).+\?/

之类的东西替换它

答案 2 :(得分:1)

你可以分解它,所以前缀和后缀是它们自己的匹配组,并将它们包含在被替换的值中:

string.replace(/(v\/)(.+)(\?)/, "$1replace$3");

或者更简单地将您正在替换的模式视为不匹配的组:

string.replace(/(v\/).+(\?)/, "$1replace$2")