什么是带有标题:[name]的正则表达式匹配?

时间:2019-07-14 05:12:40

标签: javascript regex

如何将正则表达式与“标题:[名称]”格式匹配?我用过

^ ([a-zA-Z0-9]) + (. *?) + \: + (. *?) + $

但失败了。

3 个答案:

答案 0 :(得分:2)

在您的模式中,使用具有含义的空格。如果您要删除所有空格,则您的模式将匹配并看起来像以下具有3个捕获组:

^([a-zA-Z0-9])+(.*?)+\:+(.*?)+$

关于图案

当您使用量词(在本例中为+)重复该组时,该组包含上一次迭代的值,因此您可以将量词移到该组内。

第一组匹配,直到caption。您可以省略(.*?)+,因为:是下一个字符,并且将与\:+匹配。

该部分本身可以写为:,因为您不必逃脱冒号,而要匹配单个:

第二组没有考虑方括号的开头和结尾。可以使用(\[.*?\])进行匹配,或者使用negated character class (\[[^]]+\])

进行更有效的匹配

如果要保留捕获组,则模式可能类似于:

^([a-zA-Z0-9]+): (\[[^\]]+\])$

Regex demo

答案 1 :(得分:1)

在当前的正则表达式中,您遇到很多问题

  • ^-这表示字符串开头后的匹配空间,而您输入的字符串没有任何内容
  • ([a-zA-Z0-9])+-这意味着匹配组一次或多次,即尝试匹配重复的字符
  • (. *?)-这意味着匹配任意一个字符,然后匹配零个或多个空格字符
  • +-这意味着一个或多个空格字符

您可以使用

/^[a-zA-Z0-9]+\s*:\s*\[[^\]]+\]$/

enter image description here

let str = "caption: [name]" 

let reg = /^[a-zA-Z0-9]+\s*:\s*\[[^\]]+\]$/

console.log(reg.test(str))

答案 2 :(得分:1)

我猜您希望设计一个类似于以下内容的表达式:

^([^:]+)\s*:\s*(\[[^\]]+\])$

并捕获caption[name]


如果要浏览/简化/修改该表达式,请在this demo的右上角进行解释。

const regex = /^([^:]+)\s*:\s*(\[[^\]]+\])$/gm;
const str = `caption: [name]
other_captions: [other_names]`;
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}`);
    });
}