正则表达式匹配方括号内的字符串,用冒号分隔

时间:2018-08-09 18:56:17

标签: javascript regex

我正在尝试解析一个始终具有以下格式的字符串:[firstpart:lastpart],这样我就可以将“ firstpart”和“ lastpart”作为单独的项目来获取。 “ firstpart”值始终是一个字符串,而“ lastpart”值可以包含整数和文本。整个字符串[firstpart:lastpart]可以被我不需要的其他任何数量的文本包围,因此可以使用方括号。

我一直在尝试修改此内容:

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

就这样,这让我明白了:

  1. [firstpart:lastpart
  2. [第一部分
  3. 最后部分]

所以我只需要从2和3中除去开括号和闭括号。

仅使用正则表达式可能吗?如果相关的话,我在TinyMCE插件中使用JavaScript。

2 个答案:

答案 0 :(得分:3)

分别在正则表达式的开头和结尾处放置\[\],并捕获它们之间的文本

console.log(
  'foo[firstpart:lastpart]bar'.match(/\[([^:]+):([^:\]]+)\]/)
);

答案 1 :(得分:1)

您可以在组外匹配左括号和右括号:

\[([a-z]+):([a-z0-9]+)]

请注意,[^:\s]+不能匹配比一个字符串或一个字符串或整数更多的冒号或空格字符,并且不能使开头的\[逸出以与之匹配,否则它将开始一个字符类

let str = "[firstpart:lastpart]";
console.log(str.match(/\[([a-z]+):([a-z0-9]+)]/i));