Как найти кусок и заменить в длинной строке, используя JavaScript - PullRequest
0 голосов
/ 04 января 2019

У меня есть длинная строка, и я хочу заменить 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 голосов
/ 04 января 2019

Ваше регулярное выражение соответствует http, где p является необязательным из-за вопросительного знака.Кроме того, если вы используете конечный , in и заменяете полное совпадение, то эта запятая также будет заменена.

Не сопоставляя часть http, вы можете сопоставить server:, а затем сопоставлять от начального разделителя дозакрывающий разделитель.

Как упоминалось в комментариях, вы можете использовать обратную ссылку к первой группе захвата, чтобы, например, server:"localhost:3000' не совпадало.

\bserver:\s*([`'"]).*?\1

Пояснение

  • \bserver\s* Соответствует серверу, за которым следуют 0+ пробельных символов, и используйте границу слова \b, чтобы убедиться, что сервер не является частью более длинного слова
  • ([`'"]) Захват одного из подходящих символов из класса символов в первой группе захвата
  • .*? Соответствие 0+ раз любому символу, не являющемуся жадным
  • \1 Соответствие обратной ссылкек захваченной группе 1

См. демонстрационную версию regex

Например:

from: /\bserver:\s*([`'"]).*?\1/g,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...