3 回答
TA貢獻1877條經驗 獲得超6個贊
[您可以從匹配大寫字符 AZ開始。然后匹配|prefix,然后在一組中捕獲您想要保留的內容。
然后可選擇匹配|suffix并使用另一個組來捕獲您想要保留的內容。
\[[A-Z]+\|(prefix=)([^\]|]+)(?:\|(suffix=)([^\]|]+))?]
const regex = /\[[A-Z]+\|(prefix=)([^\]|]+)(?:\|(suffix=)([^\]|]+))?]/g;
const str = `[TITLE|prefix=a] [STORENAME|prefix=s|suffix=s] [DYNAMIC|limit=10|random=0|reverse=0]`;
let m;
while ((m = regex.exec(str)) !== null) {
console.log(`key: ${m[1]}`)
console.log(`value: ${m[2]}`)
if (m[3] !== undefined) {
console.log(`key: ${m[3]}`)
console.log(`value: ${m[4]}`)
}
}
如果[TITLE必須在左側,您還可以使用帶有無限量詞的正后視來獲得匹配項:
(?<=\[TITLE\|.*)(prefix=|suffix=)([^|\]*])
const regex = /(?<=\[TITLE\|.*)(prefix=|suffix=)([^|\]*])/g;
const str = `[TITLE|prefix=a] [STORENAME|prefix=s|suffix=s] [DYNAMIC|limit=10|random=0|reverse=0]`;
let m;
while ((m = regex.exec(str)) !== null) {
console.log(`key: ${m[1]}`)
console.log(`value: ${m[2]}`)
}
TA貢獻1943條經驗 獲得超7個贊
嘗試以下:
(?<=TITLE\|prefix=)[\w]+|(?<=[\w]+\|suffix=)[\w]+
解釋:
TITLE|prefix= --> 將搜索文本“TITLE|prefix=”
?<= --> 將取消選擇它
(?<=[\w]+|suffix=) --> 同樣,將選擇“suffix=”和它之前的任何內容,并將取消選擇它
[\w]+ --> 將選擇“TITLE|prefix=”和“suffix=”之后的詞
TA貢獻1796條經驗 獲得超10個贊
您可以嘗試遵循正則表達式。
(?<=prefix=).*?(?=]|\|)
詳情:
(?<=prefix=): Lookbehind - 在字符之后匹配字符串prefix=.*?: 匹配盡可能少的任何字符(?=]|\|): 獲取任何字符直到]或|
我還嘗試在 javascript 上運行代碼。
var string = "[TITLE|prefix=a] [STORENAME|prefix=s|suffix=s] [DYNAMIC|limit=10|random=0|reverse=0]";
var res = string.match(/(?<=prefix=).*?(?=]|\|)/g);
console.log(res);
添加回答
舉報
