我需要从带有开始和结束标签的大字符串中删除一些文本。例如:
...
// THIS IS START
..
..
// THIS IS END
...
以上文本保存在变量中。而且我需要删除所有从// THIS IS START
到// THIS IS END
的文本。我知道我可以通过将字符串分成几行然后逐行解析来删除它们。但我正在寻找更好的解决方案。我是否可以使用regex
实现这一目标?对我来说,困难的部分是使用变量作为开始/结束标签。
答案 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"));