寻找正则表达式从字符串中删除文本

时间:2018-08-05 04:41:52

标签: javascript regex

我需要从带有开始和结束标签的大字符串中删除一些文本。例如:

...
// THIS IS START
..
..
// THIS IS END
...

以上文本保存在变量中。而且我需要删除所有从// THIS IS START// THIS IS END的文本。我知道我可以通过将字符串分成几行然后逐行解析来删除它们。但我正在寻找更好的解决方案。我是否可以使用regex实现这一目标?对我来说,困难的部分是使用变量作为开始/结束标签。

3 个答案:

答案 0 :(得分:1)

使用.replace搜索THIS IS START lazy 重复任意字符,直到THIS IS END

const str = `...
// THIS IS START
..
foo
..
// THIS IS END
...
between
...
// THIS IS START
..
bar
..
// THIS IS END`;
console.log(str.replace(/(\/\/ THIS IS START)[\s\S]+?(\/\/ THIS IS END)/g, '$1\n$2'));

如果您也不希望包含//行,则不必费心捕获它们,而用空字符串替换:

const str = `...
// THIS IS START
..
foo
..
// THIS IS END
...
between
...
// THIS IS START
..
bar
..
// THIS IS END`;
console.log(str.replace(/\s\/\/ THIS IS START[\s\S]+?\/\/ THIS IS END/g, ''));

答案 1 :(得分:0)

这是一个非常简单的情况。您需要屏蔽/,并确保在开始标签和结束标签之间用[^]*?表达式(.*?不允许换行!)匹配“尽可能短的”字符串,但是否则这很简单。

已编辑,(在@revo提示后):

string.replace(/\/\/ THIS IS START[^]*?\/\/ THIS IS END/g,'')

字符类[^]允许所有个字符,包括换行符等。

答案 2 :(得分:0)

我认为应该(使用gs选项)

var str = `
// THIS IS START
..
// THIS IS END`;
console.log(str.replace(/\/\/ THIS IS START\n(.+)\/\/ THIS IS END/gs, "$1"));

https://jsfiddle.net/m8hd1au6/19/