Javascript 如何使用replace方法重写url路径?

Javascript 如何使用replace方法重写url路径?,javascript,regex,Javascript,Regex,我的项目正在使用本地服务器代理。它使用正则表达式将api代理到本地文件路径 以下是我的场景: 我的本地http请求是“/api/bpm/fetch action progress bar?bpm=123”,它最终将找到json文件名“app/data/bpm/fetch action progress bar.json” 前提条件:只应重写以“/api”开头的路径,且api路径不确定 实现“myRegex”以满足以下三个示例: 例1 '/api/bpm/fetch操作进度条?bpm=123'.r

我的项目正在使用本地服务器代理。它使用正则表达式将api代理到本地文件路径

以下是我的场景:

我的本地http请求是“/api/bpm/fetch action progress bar?bpm=123”,它最终将找到json文件名“app/data/bpm/fetch action progress bar.json”

前提条件:只应重写以“/api”开头的路径,且api路径不确定

实现“myRegex”以满足以下三个示例:

例1

'/api/bpm/fetch操作进度条?bpm=123'.replace(myRegex,'app/data/$1.json'))
需要:'app/data/bpm/fetch action progress bar.json'

例2

'/api/bpm/fetch操作进度条'.replace(myRegex,'app/data/$1.json')
需要:'app/data/bpm/fetch action progress bar.json'

例3

'/api/yt/order/export?id=1212'.替换(myRegex,'app/data/$1.json'))
通缉犯:“app/data/yt/order/export.json”

我只能用replace方法,帮我实现一个‘myRegex’来解决它。我的困难是查询参数可能不存在

/.*?(?!.*\/)([\w\-]+)[^?]?.*/
将queryparam“?”设置为可选

我在jsfiddle.net中检查了这个

console.log('/api/bpm/fetch-action-progress-bar?bpm=123'.replace(/.*?(?!.*\/)([\w\-]+)[^?]?.*/, 'app/data/$1.json'))  

console.log('/api/bpm/fetch-action-progress-bar'.replace(/.*?(?!.*\/)([\w\-]+)[^?]?.*/, 'app/data/$1.json')) 
演示和解释如下: regex101.com/r/HBvG3K/11

根据聊天室中的请求进行更新

\/api\/([\w\-\/]+).*

由于此任务不需要考虑全局或多行标志的方法,因此类似于regex的简单正则表达式已经足够/可靠了。。。请参阅以下符合OP要求的测试

//另请参见:[https://regex101.com/r/3mab2d/1]
常量regXReplacePath=(/\/api\/([^?#]+)[?#]*.*/);
//例1
//:“/api/bpm/fetch操作进度条?bpm=123”
//=>“app/data/bpm/fetch action progress bar.json”
console.log(
“/api/bpm/fetch操作进度条?bpm=123”。替换(
regXReplacePath,
“app/data/$1.json”
)='app/data/bpm/fetch-action-progress-bar.json'
);
//例2
//:“/api/bpm/fetch操作进度条”
//=>“app/data/bpm/fetch action progress bar.json”
console.log(
“/api/bpm/fetch操作进度条”。替换(
regXReplacePath,
“app/data/$1.json”
)='app/data/bpm/fetch-action-progress-bar.json'
);
//例3
//:“/api/yt/order/export?id=1212”
//=>“app/data/bpm/fetch action progress bar.json”
console.log(
“/api/yt/order/export?id=1212”。替换(
regXReplacePath,
“app/data/$1.json”
)='app/data/yt/order/export.json'
);

。作为控制台包装{min height:100%!important;top:0;}
考虑使用新的“我做不到”。因为开发中的cli只分解regexIt的接口不满足exapmle 2。我也在检查另一个示例。在编辑queryparam“?”可选项后,它不满足exapmle 1.console.log(“/api/bpm/fetch action progress bar?bpmCode=123213”。替换(/.*?!.\\/)(.\?)\??./,“app/data/$1.json”)
console.log('/api/bpm/fetch操作进度条?bpm=123'.replace(/.*(?!.\/)([\w\-]+)[^?]?*/,'app/data/$1.json'))console.log('/api/bpm/fetch操作进度条)。replace(/.*(?!.\/)([\w\-]+)[^?]?*/,'app/data/$1.json'))
现在都可以了。我在jsfiddle.net中进行了测试。你也可以试试并确认一下,以便我更新答案。非常感谢。你能给我解释一下正则表达式吗?我不懂“*?(!!.\/)([\w\-]+)”