RegExp替换JavaScript中的子字符串
RegExp replace substring in JavaScript
我在序列化字符串中有几个信号标志,当用户请求某个操作时,我需要从字符串中删除标志。我无法找到一个在所有情况下都适用于以下字符串的正则表达式。
var flags = "out:ab,bc,bcc,cd";
这是我得到的最接近的(例如删除bc标志)
flags.replace(/[:,]bc'b/, "");
结果是out:ab,bcc,cd
,这很酷,但当去除ab时,我会得到outbc,bcc,cd
,这是错误的。结果必须始终保持字符串序列化,例如out:flag1,flag2
我尝试捕获子模式,但无法找到一个全面的工作组合。
——更多信息:
标志是0/1信号,如果一个标志存在,我必须删除它。
Out:是操作模式,与In相反(这是第二组标志)。简单来说,Out:是"允许所有人,但将这些人列入黑名单",而In:是"拒绝所有人,但将这些人列入白名单"。这款应用可以在两种模式下运行。Ab, bc, CD…
使用non-capturing parentheses
:
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的正则表达式:
(?:x)匹配'x'但不记得匹配。括号称为非捕获括号,允许您定义正则表达式操作符要使用的子表达式。考虑示例表达式/(?:foo){1,2}/。如果没有非捕获括号,{1,2}字符将仅应用于'foo'中的最后一个'o'。使用捕获括号,{1,2}应用于整个单词'foo'。
Edit: RegExp的解释
/(?:[:](cd|bc))|(,(cd|bc)(?=,))|(,(cd|bc)$)/g
有三个部分,由管道分开。?:[:](cd|bc)
覆盖分号后面的标志;,(cd|bc)(?=,)
覆盖逗号之间的标志,包括匹配表达式中前面的逗号;,(cd|bc)$
覆盖字符串末尾的标志,也包括前面的逗号。
编辑2:
修正了RegExp,将q
替换为您想要匹配的标志
相关文章:
- 字符串替换-不支持格式字符'}'
- Unicode字符串替换不适用于完整的变音符号阿拉伯文本
- Javascript 将字符串替换为
返回为空 - 字符串替换只替换第一个匹配项,可以'不要让它全球化
- javascript字符串替换$1(如果它是某个值)
- 字符串替换正则表达式,开头为空格
- 将 url 中的一个字符串替换为另一个字符串
- 在HTML文本框中查找某些子字符串,然后用其他字符串替换它们
- 我想使用replace函数扫描json对象,然后用字符串替换匹配的单词
- 字符串替换为从右向左的语言(阿拉伯语)
- 将字符串替换为用户键入的文本
- 字符串替换javascript
- JavaScript 将多行字符串替换为多行字符串
- Javascript字符串替换不起作用
- 字符串替换不'当通过android webView JavascriptInterface传递字符串时无法工作
- 我正在尝试用另一个字符串替换一个字符串
- 字符串替换最后一个字符出现的斜杠
- 将具有的字符串替换为$
- 基于查询字符串替换HTML
- Javascript字符串替换在满足长度而不是instantanoeus之前不会生效