gpt4 book ai didi

javascript - RegExp 替换 JavaScript 中的子字符串

转载 作者:行者123 更新时间:2023-11-29 22:12:56 25 4
gpt4 key购买 nike

我在序列化字符串中有几个信号标志,当用户请求某个操作时,我需要从字符串中删除标志。我无法找到适用于以下字符串的所有情况的正则表达式。

var flags = "out:ab,bc,bcc,cd";

这是我得到的最接近的(例如删除 bc 标志)

flags.replace(/[:,]bc\b/, "");

结果是 out:ab,bcc,cd 这很酷,但是当删除 ab 时我会得到 outbc,bcc,cd 这是错误的。结果必须始终保持字符串序列化,例如输出:标志 1,标志 2我 try catch 子模式,但找不到一个全面的工作组合。

-- 更多信息:

标志是 0/1 信号,如果存在标志,我必须将其删除。

Out: 是操作模式,它与 In: 相反(这是第二组标志)。简单来说,Out: 是“允许所有,但将这些列入黑名单”,其中 In: 是“拒绝所有,但将这些列入白名单”。该应用程序可以在任一模式下运行。 ab、bc、cd ... 是示例字母键。

最佳答案

使用非捕获括号:

var q = ['cd', 'bc'].join('|'),
re = new RegExp('(?:[:]('+q+'))|(,('+q+')(?=,))|(,('+q+')$)', 'g'),
flags = "out:ab,bc,bcc,cd";
flags.replace(re, '');
=> "out:ab,bcc"

来自 MDN 的 Regular Expressions :

(?:x) Matches 'x' but does not remember the match. The parentheses are called non-capturing parentheses, and let you define subexpressions for regular expression operators to work with. Consider the sample expression /(?:foo){1,2}/. Without the non-capturing parentheses, the {1,2} characters would apply only to the last 'o' in 'foo'. With the capturing parentheses, the {1,2} applies to the entire word 'foo'.


编辑:正则表达式的解释

/(?:[:](cd|bc))|(,(cd|bc)(?=,))|(,(cd|bc)$)/g

共有三个部分,由管道分隔。 ?:[:](cd|bc) 覆盖分号后的标志; ,(cd|bc)(?=,) 覆盖逗号之间的标志,包括匹配表达式中前面的逗号; ,(cd|bc)$ 覆盖字符串末尾的标志,也包括前面的逗号。


编辑 2:

修复了 RegExp,将 q 替换为您要匹配的标志。

关于javascript - RegExp 替换 JavaScript 中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17054526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com