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);
添加回答
举报