javascript - 括号匹配的正则表达式
问题描述
/(?:^|[^\/\\])\[([\w\s-]*)($|\[)/
当用户开始输入字符并输入 [some tex, 以匹配此内容时,我使用当前正则表达式进行匹配。当他关闭时,比赛就停止了。
问题是我在前面添加了条件,?:
如果他输入\[
or /[
,我不会匹配它。
好吧,但是,如果他有类似的东西[text][bla
- 在这个我将匹配前一个]
括号并且字符串将是][bla
,但我不想要这个。如果他进入[test] [car
- 这将匹配前面的空间并且将是_[car
-_
是空间。
我希望两者都只匹配从左括号到,而不是在它之前。各位有什么想法吗。谢谢!
解决方案
我并不完全清楚,但如果我理解正确,您想检测成对的[
和]
尖括号,但跳过/
和\
转义尖括号,如\]
and /]
,对吗?
[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 个尖括号对,其中两个有转义括号,一个跟在另一个后面没有空格
- 第一个正则表达式用临时标记替换转义的尖括号,这样第二个正则表达式就不会越过转义的尖括号
- 第二个正则表达式识别正确的尖括号对
- 第三个正则表达式将标记恢复到转义的尖括号
- 生成的文本在尖括号对周围添加粗体标签以指示正确解析
将来,指定示例输入字符串以及每个输入的预期输出会很有帮助。
推荐阅读
- java - Java 模式匹配器不能与缓存匹配器对象一起使用,例如 Redis 缓存
- r - 将 DF 写为镶木地板错误 - 推断值
- python - 适用于 Windows 10 的 Anaconda 上的 python snap7 - 找不到 snap7 库
- ios - UICollectionView Landscape 从 Portrait 视图更改列
- reactjs - 如何手动将操作分派到使用 configureStore 创建的商店?
- spring-boot - Zuul 和其他服务中的 Sleuth Trace id 不同
- iframe - 无法从invest.com 加载日历小部件
- linux - OpenRC emacs 守护进程崩溃并且无法启动
- angular - 在 Angular 8 中如何管理大型 html 文件?
- c# - 对于此操作,WebSocket 处于无效状态(“已中止”)