我有一個字串格式的陣列。使用 Javascript,如何以盡可能少的代碼替換[、]、<Tag: 和>:
let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"
最終結果應如下所示:
"cats, dogs, parakeets"
這似乎有效,但它很漂亮......不是很好。
s.replace(/^\[/, '').replace(/\]$/, '').replaceAll('<Tag: ', '').replaceAll('>', '')
有沒有一種聰明的方法可以用 RegEx 做到這一點?
uj5u.com熱心網友回復:
匹配<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);
uj5u.com熱心網友回復:
我建議匹配所有子字串并加入它們:
const result = [...s.matchAll(/<Tag:\s*(\w )>/g)]
.map(
([, m]) => m
)
.join(', ');
// result: "cats, dogs, parakeets"
uj5u.com熱心網友回復:
當支持lookbehind中的無限量詞時,您可以匹配<Tag: 和之間的所有值,并>確保所有匹配都在方括號之間。
請參閱此正則運算式演示中的正則運算式匹配。
let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]"
const regex = /(?<=\[[^\][]*<Tag: )\w (?=>[^\][]*\])/g;
console.log(s.match(regex).join(", "));
uj5u.com熱心網友回復:
那這個呢?洗掉分隔符[,],>和<Tag: 部分:
let s = "[<Tag: cats>, <Tag: dogs>, <Tag: parakeets>]";
s = s.replace(/[[\]>]|<.*? /g, "");
console.log(s);
uj5u.com熱心網友回復:
不使用正則運算式,但它確實回傳所需的相同結果。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334540.html
標籤:javascript 正则表达式
下一篇:條件格式:具有間接參考的多個條件
