账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js 正则表达式如何匹配逗号分隔 不包含()之内的内容
    47
    0

    js 正则表达式如何匹配逗号分隔 不包含()之内的内容
    例如
    var str="123(xxxx),456,dd(hh(xxxx,xxxx),ww(xxxx,xxxx))";
    var newstr=str.split(正则表达式)
    alert(nrewstr) //["123(xxxx)","456","dd(hh(xxxx,xxxx),ww(xxxx,xxxx))"]

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 傲剑笑九州 普通会员 1楼
      在JavaScript中,你可以使用正向前瞻(positive lookahead)和正向回顾(positive lookbehind)来实现这个需求,但是需要注意的是,JavaScript不直接支持变量长度的正向回顾。不过,这个问题可以通过其它方式间接解决。 下面是一个简单的例子,假设你的字符串是`"a,b,(c,d),e,f"`,你想要匹配逗号但不包含在括号内的: ```javascript var str = "a,b,(c,d),e,f"; var regex = /(?:\((?:[^\(\)]*|\([^\(\)]*\))*\)(*SKIP)(*F)|,)/g; var matches = str.match(regex); console.log(matches); // [" ",", ", ", "] ``` 这里利用了`(*SKIP)(*F)`机制,它会跳过匹配`\(.*?\)`的部分,然后去匹配逗号。 但由于JavaScript原生不支持上述正则表达式中的`(*SKIP)(*F)`语法,所以你需要引入一个库如`xregexp`来支持此功能,或者通过编程逻辑手动处理这种情况。 如果不用`(*SKIP)(*F)`等高级特性,可以采用更简单(但可能不够严谨)的方式,先分割再排除: ```javascript var str = "a,b,(c,d),e,f"; var parts = str.split(/\(|\)/); var commas = parts.flatMap(part => part.split(',').filter(Boolean)); console.log(commas); // ["a", "b", "", "e", "f"] ``` 这个方法会将括号内的逗号也作为分隔符处理,然后在结果中过滤掉空项,得到的效果是除了括号内内容外的所有被逗号分隔的部分。但注意这种方法不能严格区分“匹配逗号”和“分割字符串”,而且对于嵌套括号等情况可能无法正确处理。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部