正则表达式匹配的OrgMode标签

时间:2019-06-19 14:54:31

标签: javascript regex

我想用JavaScript编写一个正则表达式以匹配OrgMode格式的标签

示例:

  • 示例标题:tag1:tag2:tag3:

我已经测试了以下正则表达式,但它仅与第一个和最后一个标签(tag1,tag3)匹配:

\:\w+\:

谢谢

2 个答案:

答案 0 :(得分:0)

我的猜测是,如果我们要验证的话,这里可能需要一个带有开始和结束锚点的表达式:

^((?=:\w+)(:\w+)+):$

Demo 1

const regex = /^((?=:\w+)(:\w+)+):$/gm;
const str = `:tag1:tag2:tag3:
:tag1:tag2:tag3:tag4:
:tag1:tag2:tag3:tag4:tage5:
:tag1:tag2:tag3:tag4:tage5`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

答案 1 :(得分:0)

使用

/:(\w+)(?=:)/g

您需要的值在第1组内。请参见regex demo online

要点是(?=:)正向查找:它检查(并要求),但不消耗:模式右侧的\w+

请参见下面的JS演示

var s = "Sample title :tag1:tag2:tag3:";
var reg = /:(\w+)(?=:)/g;
var results = [], m;
while(m = reg.exec(s)) {
  results.push(m[1]);
}
console.log(results);