javascript - 匹配不在一组开始和结束字符内的模式,例如 {}、()

标签 javascript regex

下面有这个字符串模式

str = "nums#1#2#3{#4}#5"

有一种方法可以匹配所有 #\d+ 模式,但不包括花括号内的模式。

我目前通过在匹配之前用空字符串替换大括号和所有包含它们的内容来实现预期的结果。

str = str.replace(/\{[^}]*\}/g, '');
match = str.match(/#\d+/g);

有没有办法在 javascript 正则表达式中做到这一点而无需第一次替换?

最佳答案

假设 {} 是平衡的,您可以使用这种否定先行来匹配不在 {...} 内的数字:

var str = "nums#1#2#3{#4}#5";
var arr = str.match(/#\d+(?![^{]*})/g)
    
console.log(arr)
//=> ["#1", "#2", "#3", "#5"]

(?![^{]*} 是一个否定前瞻,它在一个数字之后断言我们在匹配 {

关于javascript - 匹配不在一组开始和结束字符内的模式,例如 {}、(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43401949/

相关文章:

javascript - 使用 Backbone.js 处理浏览器历史记录

javascript - 想要减小在对话框中添加的 div 的大小

c# - asp.net 在更改下拉列表时使用 javascript 填充下拉列表

javascript - jQuery 滚动超出 View 的问题

javascript - 扩展 jQuery Validate 方法以验证多个 CSV IP 地址

c# - 如何匹配并返回字符串的多个实例,其中任何索引中都可以包含单个撇号?

java - Java中将字符串拆分为等长子字符串

java - 密码的正则表达式

regex - 批处理文件命令 - 从文件中删除带有短语的行

javascript - redux 存储的最大内存大小是多少?