删除随机符号之间的文本- JavaScript

piok6c0g  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(113)

我有一个模式为* + [*]*[/*] + *的输入文本:
输入:[tag]random text EXCLUDE[/tag] text here
输出:text here
输入:[tag_1]another random text EXCLUDE[/tag_1] another text here
输出:another text here
输入:[tag_1]another random text EXCLUDE[/tag_1] another text here [tag_1] another random text EXCLUDE[/tag_1] text [tag_3]another random text EXCLUDE[/tag_3]
输出:another text here text
我想要的是删除[*][/*]之间的文本,比如用"“替换它。
问题是[]之间的符号是随机的,但是如果有一个开放的[*],则有和封闭的[/*],没有嵌套。

cnjp1d6j

cnjp1d6j1#

这应该可以达到目的:

let OUTPUT = INPUT
    .split('[')
    .filter(s => s.indexOf(']') == -1 || s.startsWith('/'))
    .map(s => s
        .split(']')
        .reverse()[0])
    .join('')

要点是,[]中的文本实际上并不重要,我们所需要的只是方括号作为“锚”。
我试过了,但没能写出一个简洁的一步一步的解释......我的建议是将代码复制粘贴到控制台中,给它一些数据,然后观察每一步的结果,这是不言而喻的。

iklwldmw

iklwldmw2#

对于正则表达式来说,这看起来是一个不错的工作:

const theStrings = [ '[tag]random text EXCLUDE[/tag] text here',
  '[tag_1]another random text EXCLUDE[/tag_1] another text here',
  '[random]another random text EXCLUDE[/random] another text here',
  '[this]is not to be [/filtered] as they don\'t match',
  '[tag_1]another random text EXCLUDE[/tag_1] another text here [tag_1] another random text EXCLUDE[/tag_1] text [tag_3]another random text EXCLUDE[/tag_3]'
 ]

let replaced = '';
let prev_len = 0;
theStrings.forEach(str => {
  replaced = str;
  do {
    prev_len = replaced.length ;
    replaced = replaced.replace(/\[(.*)\].*?\[\/\1\](.*)/,'$2') 
  } while (replaced.length < prev_len);
  console.log("before:",str,"\nafter:", replaced)

} )

https://regex101.com/r/cE6NZm/1
基本上,它捕获[this][/this]之间的任何内容(注意,它们是相同的,但第二个必须在/之后),并释放字符串的这一部分

相关问题