括号匹配的正则表达式

用户12487529

/(?:^|[^\/\\])\[([\w\s-]*)($|\[)/当用户开始输入字符并输入 [some tex, 以匹配此内容时,我会使用当前的正则表达式进行匹配。当他关闭时,它会停止比赛。

问题是我在前面添加了条件?:,如果他输入\[or /[,我不会匹配它。

好吧,但是,如果他有类似的东西[text][bla- 在这个中我将匹配前面的]括号,字符串将是][bla,但我不想要这个。如果他进入[test] [car- 这将匹配前面的空间并且将_[car-_是空间。

我希望两者都只从左括号匹配,而不是在它之前匹配。你们有什么想法吗。谢谢!

彼得·托尼

我还不完全清楚,但如果我理解正确的话,你想检测的对[]尖括号,但跳过/\逃脱尖括号状\]/],是否正确?

因此,[aaa]将一对,[bbb/[ccc/]ddd]另外,和[eee\[fff\]ggg]其他。

以下是使用三个正则表达式解析它的方法:

var str = 'Test [1st], and [2nd\\[with\\]escapes], and [3nd/[more/]escapes][4thNoSpace] text';
var re = /(\[[^\]]*\])/g;
var result = str
.replace(/([\\\/])\]/g, '$1\x01') // replace escapes with tokens
.replace(re, function(m, p1) {    // process bracket pairs
  return '<b>' + p1 + '</b>';
})
.replace(/(.)\x01/g, '$1\]');     // restore escapes from tokens

console.log('before: ' + str);
console.log('result: ' + result);
document.body.insertAdjacentHTML('beforeend', result);

所以,这个输入:
Test [1st], and [2nd\[with\]escapes], and [3nd/[more/]escapes][4thNoSpace] text

...产生这个输出:
Test <b>[1st]</b>, and <b>[2nd\[with\]escapes]</b>, and <b>[3nd/[more/]escapes]</b><b>[4thNoSpace]</b> text

解释:

  • 测试输入字符串有 4 个尖括号对,其中两个有转义括号,一个后面没有空格
  • 第一个正则表达式用临时标记替换转义的尖括号,以便第二个正则表达式不会被转义的尖括号绊倒
  • 第二个正则表达式标识正确的尖括号对
  • 第三个正则表达式将标记恢复到转义的尖括号
  • 生成的文本在尖括号对周围添加了粗体标记以指示正确的解析

将来,指定示例输入字符串和每个输入的预期输出会很有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章