我需要在捕獲組中匹配以下任一數字:1 2 4 8 16 32 64。
我試過了:([1248\b16\b\b32\b])(.*)$那沒有用。
let RE = /([1248163264])/
let trues = ["q1", "q2", "q4", "q16", "q32", "q64"].forEach(_ => _.match(RE))
let falses = ["q3", "q13", "q6"].forEach(_ => _.match(RE))
console.log(trues, falses)
uj5u.com熱心網友回復:
此模式([1248\b16\b\b32\b])(.*)$有 2 個捕獲組,其中第一個捕獲組包含與列出的字符中的 1 個匹配的字符類。
如果您打算使用這樣的單詞邊界(1248\b16\b\b32\b),那也將不匹配,因為這是一個所有都必須按該順序匹配的模式。
2位數字之間也沒有單詞邊界。
您可以改為使用負環視作為數字邊界:
(?<!\d)(?:[1248]|16|32|64)(?!\d)
正則運算式演示
let RE = /(?<!\d)(?:[1248]|16|32|64)(?!\d)/;
["q1", "q2", "q4", "q16", "q32", "q64"].forEach(s => console.log(`${s} --> ${RE.test(s)}`));
["q3", "q13", "q6"].forEach(s => console.log(`${s} --> ${RE.test(s)}`));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/443547.html
下一篇:如何使乳膠表中的每個單詞加粗?
