如何使用JavaScript查找块并替换为长字符串

时间:2019-01-04 06:52:46

标签: javascript regex

我的字符串很长,我想将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')

如何修改,请指导!!!

1 个答案:

答案 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,