регулярное выражение для удаления определенных символов в начале и конце строки - PullRequest
0 голосов
/ 10 сентября 2018

Допустим, у меня есть такая строка:

...hello world.bye

Но я хочу удалить первые три точки и заменить .bye на !

Таким образом, вывод должен быть

hello world!

должно совпадать, только если применяются оба условия (... в начале и .bye в конце)

И я пытаюсь использовать метод js replace. Не могли бы вы помочь? Спасибо

Ответы [ 4 ]

0 голосов
/ 10 сентября 2018

Возможно более простое решение:

const str = '...hello world.bye'
const newStr = /...(.+)\.bye/.exec(str)

const formatted = newStr ? newStr[1] + '!' : str

console.log(formatted)

Если строка не соответствует регулярному выражению, она просто вернет строку.

0 голосов
/ 10 сентября 2018

Сначала сопоставьте точки, перехватывайте и повторяйте ленивые символы, пока не достигнете .bye, и сопоставьте .bye. Затем вы можете заменить первую захваченную группу плюс восклицательный знак:

const str = '...hello world.bye';
console.log(str.replace(/\.\.\.(.*)\.bye/, '$1!'));

Имеется ленивый повтор, чтобы гарантировать, что вы не слишком много соответствует, например:

const str = `...hello world.bye
...Hello again! Goodbye.`;
console.log(str.replace(/\.\.\.(.*)\.bye/g, '$1!'));
0 голосов
/ 10 сентября 2018

Вам на самом деле не нужно регулярное выражение, чтобы сделать это.Хотя это немного не элегантно, следующее должно работать нормально (очевидно, что функцию можно вызывать как угодно в контексте вашего приложения):

function manipulate(string) {
    if (string.slice(0, 3) == "..." && string.slice(-4) == ".bye") {
        return string.slice(4, -4) + "!";
    }
    return string;
}

(Извините, если я сделал какие-то глупые ошибки с индексацией там,но основная идея должна быть очевидна.)

Это, по крайней мере для меня, имеет то преимущество, что его легче рассуждать, чем регулярное выражение.Конечно, если вам нужно иметь дело с более сложными случаями, вы можете достичь точки, в которой регулярное выражение является лучшим - но я лично не стал бы беспокоиться о простом сценарии использования, подобном тому, который упоминается в ОП.

0 голосов
/ 10 сентября 2018

Ваше регулярное выражение будет

const rx = /\.\.\.([\s\S]*?)\.bye/g

const out = '\n\nfoobar...hello world.bye\nfoobar...ok.bye\n...line\nbreak.bye\n'.replace(rx, `$1!`)

console.log(out)

На английском языке найдите три точки, что угодно в группе и заканчивается на .bye.

При замене используется первое совпадение $1 и concats! с использованием строкового шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...