我的字符串很长,我想将server:${address.ip()}:3000
替换为server:localhost:3000
这是一个字符串
function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.environment={production:!0,server:"localhost:3000",apikey:"XXXX"}},BRrH:function(t,e,n){t.exports=c;var r=n("bkOT")("simple-peer"),o=n("3oOE"),i=n("P7XM")
我在做什么
update-ip.js
import replace from "replace-in-file";
import * as address from "address";
export class UpdateIpService {
constructor() {
}
static update(filepath: string) {
replace({
files: filepath,
from: /server:\s*[`'"]http?:\/\/.*?[`'"],/g,
to: `server: 'http://${address.ip()}:3000/',`
}).then(changes => {
console.log(`Ip address updated in file: ${changes}`)
}).catch(err => {
console.log('File could not be found to modify')
})
}
}
UpdateIpService.update('./main.js')
如何修改,请指导!!!
答案 0 :(得分:1)
您的正则表达式与http匹配,其中p是可选的(由于问号)。另外,如果您使用尾随,
并替换了完整匹配项,那么该逗号也将被替换。
如果不匹配http部分,则可以匹配server:
,然后从起始定界符到结束定界符进行匹配。
如评论中所述,您可以对第一个捕获组使用backreference,以便例如server:"localhost:3000'
不匹配。
\bserver:\s*([`'"]).*?\1
说明
\bserver\s*
匹配服务器,后跟0+个空格字符,并使用单词边界\b
来确保服务器不是较长单词的一部分([`'"])
从第一个捕获组的字符类中捕获一个匹配的字符.*?
匹配0+次任意字符非贪婪\1
将反向引用匹配到捕获的组1 请参见regex demo
例如:
from: /\bserver:\s*([`'"]).*?\1/g,