Соответствие регулярных выражений тегам OrgMode - PullRequest
1 голос
/ 19 июня 2019

Я хочу написать регулярное выражение в JavaScript для соответствия тегам в формате OrgMode

Пример:

  • Образец заголовка :tag1:tag2:tag3:

Я протестировал следующее регулярное выражение, но оно соответствует только первому и последнему тегам (tag1, tag3):

\:\w+\:

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Используйте

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

Значение, которое вам нужно, находится внутри группы 1. См. Демонстрационную версию regex онлайн .

Основным моментом является положительный прогноз (?=:): он проверяет (и требует), но не использует : справа от шаблона \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);
0 голосов
/ 19 июня 2019

Я предполагаю, что здесь может потребоваться выражение с начальным и конечным якорями, если бы мы проверяли:

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

Демо 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}`);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...