https://regex101.com/r/HbuaXz/5
搜索字串:
:attack
:attack-bonus
測驗用例:
foo :attack
foo :attack bar
foo :attack-bonus bar
foo :attack-bonus
:attack
:attack-bonus
如何撰寫正則運算式,以便在使用時:attack獲得這些匹配項:
foo :attack bar
foo :attack
:attack
當我使用時,:attack-bonus我會得到這些匹配項:
foo :attack-bonus bar
foo :attack-bonus
:attack-bonus
我試過使用完整的字串匹配:
^:attack$
但是:attack在字串中使用時它不會匹配。
我也試過使用后視/前瞻:
(?<=.*):attack(?=.*)
(?=.*):attack(?<=.*)
但它仍然匹配 中的:attack部分:attack-bonus。
uj5u.com熱心網友回復:
:attack(?=\s|$)應該這樣做,或者(?<=\s|^):attack(?=\s|$)如果您需要在開始時斷言空間/開始(例如,您想清除foo:attack[無空間])。
末尾的前瞻包含查找空格或輸入結尾的交替。開頭的lookbehind(如果包含它)查找空格或輸入的開頭。
顯示代碼片段
const strings = [
"foo :attack",
"foo :attack bar",
"foo :attack-bonus bar",
"foo :attack-bonus",
":attack",
":attack-bonus",
];
function test(rex) {
console.log(`Matches for ${rex}:`);
for (const str of strings) {
if (rex.test(str)) {
console.log(str);
}
}
}
test(/:attack(?=\s|$)/);
test(/:attack-bonus(?=\s|$)/);
.as-console-wrapper {
max-height: 100% !important;
}
uj5u.com熱心網友回復:
你可以使用這個正則運算式:
.*:attack(?!\S).*
正則運算式演示 1
同樣對于其他字串,使用:
.*:attack-bonus(?!\S).*
正則運算式演示 2
解釋:
.*: 在開始時匹配 0 個或多個任意字符(貪婪):: 匹配一個冒號attack:匹配文本attack:(?!\S): 前瞻斷言以確保在當前位置之前沒有非空白字符.*: 匹配 0 個或多個末尾的任何字符(貪婪)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399836.html
標籤:javascript 正则表达式
下一篇:For回圈后回傳陣列
