正则表达式删除字符串开头和结尾的某些字符

时间:2018-09-10 19:30:16

标签: javascript regex string replace

假设我有一个像这样的字符串:

.bye

但是我想删除前三个点,并将!替换为hello world!

所以输出应该是

...

仅在同时满足两个条件(开头.bye和结尾{{1}})的情况下才匹配

我正在尝试使用js替换方法。能否请你帮忙?谢谢

4 个答案:

答案 0 :(得分:0)

您的正则表达式将是

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 !

答案 1 :(得分:0)

首先匹配点,捕获并延迟重复任何字符,直到到达.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!'));

答案 2 :(得分:0)

您实际上不需要正则表达式即可。尽管有点不雅致,但以下代码应该可以正常工作(显然,可以在您的应用程序上下文中以任何有意义的方式调用该函数):

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

(很抱歉,如果我在此处进行索引时犯了任何愚蠢的错误,但基本思路应该很明显。)

至少对我来说,这具有比正则表达式更易于推理的优点。当然,如果您需要处理更复杂的情况,则可能会达到正则表达式最好的地步-但我个人不会为OP中提到的简单用例而烦恼。

答案 3 :(得分:0)

可以说是更简单的解决方案:

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

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

console.log(formatted)

如果该字符串与正则表达式不匹配,它将仅返回该字符串。