javascript RegEx替换模式在字符串中看起来像一个数组



我有一个字符串格式的数组。使用Javascript,如何用最少的代码替换[,],<Tag:>:

let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"

最终结果应该如下所示:

"cats, dogs, parakeets"

这似乎工作,但它是相当…不是很好。

s.replace(/^[/, '').replace(/]$/, '').replaceAll('<Tag: ', '').replaceAll('>', '')

是否有一个聪明的方法来做到这一点与RegEx?

匹配<Tag:然后捕获非>字符看起来就像你想要的那样:

const s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]";
const result = s.replace(/<Tag: ([^>]+)>/g, '$1').replace(/[[]]/g, '');
console.log(result);

另一种方法,匹配而不是替换:

const s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]";
const result = [...s.matchAll(/<Tag: ([^>]+)>/g)]
.map(match => match[1])
.join(', ');
console.log(result);

我建议匹配所有子字符串并将它们连接起来:

const result = [...s.matchAll(/<Tag:s*(w+)>/g)]
.map(
([, m]) => m
)
.join(', ');

// result: "cats, dogs, parakeets"

当lookbehind中支持无限量词时,您可以匹配<Tag:>之间的所有值,并确保所有匹配都在方括号之间。

查看这个正则表达式演示中的正则表达式匹配。

let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"
const regex = /(?<=[[^][]*<Tag: )w+(?=>[^][]*])/g;
console.log(s.match(regex).join(", "));

这个怎么样?删除分隔符[]><Tag:部分:

let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]";
s = s.replace(/[[]>]|<.*? /g, "");
console.log(s);

不使用正则表达式,但它确实返回相同的结果。

let res = ""
let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"
for ( let i = 0; i < s.length; i++){
let c = s[i]
if ( c == '[' || c == ']' || c == '>')
continue
else if ( s.substr(i,5) == '<Tag:')
i += 5
else
res += c
}
return res

相关内容

  • 没有找到相关文章

最新更新