【问题标题】:RegEx to delete alphanumeric and special characters inside a parenthesis正则表达式删除括号内的字母数字和特殊字符
【发布时间】:2020-06-15 19:32:32
【问题描述】:

我必须删除所有匹配此模式的条件,包括括号

(value: "hyhyyt")

里面的字符串可以是数字、特殊字符等。

我是正则表达式的新手,我想出了这个表达式,但它不起作用。在此先感谢大家。

 let regex = /^(value:[a-zA-Z0-9!@#$&()\\-`.+,/\"])$/g;
 err.message = err.message.replace(regex, '').trim();

【问题讨论】:

  • regex = /\(value:[^)]*\)/g
  • wtf,它成功了。非常感谢。
  • special characters like /( 特别是正则表达式,是吗?
  • 没有\(.*?\) 是的那么简单吗?
  • 我指的是一般的特殊字符,我只是把这两个作为例子。我改了帖子。

标签: javascript regex


【解决方案1】:

您可以像这样使用正则表达式:

\(value: .*\)

Working demo

【讨论】:

  • 感谢您的评论
  • 只要在引号之间加上一个右括号,正则表达式就会失败,正如 OP 明确指出的那样,这很可能会发生......因此它已经失败,例如'(value: "hyh)yyt")'
  • @PeterSeliger 不错。我让它不贪心,现在应该使用贪心量词
  • ... 现在正则表达式匹配这样的示例字符串... '(value: "hyhy)(yt") dknk (value: "")' 整体...但是由于OP的问题不够具体,因此仍然不知道如何处理此类案件。我最好的选择是 OP 更喜欢这样的结果...... 'dknk' 而不是 ''
  • @PeterSeliger 是的,我的回答假设贪婪匹配很好。他评论了我的回答,所以我认为它是正确的,不需要复杂的正则表达式(到目前为止)
【解决方案2】:

...根据爱德华的评论进行了编辑和改进...

以下方法的正则表达式试图既灵活/通用又足够精确。

它将在给定的字符串中识别'( value: " ... " )' 和/或"(value: ' ... ')" 的多个(子)模式。因此,它的限制(如果有的话)是由双引号括起来的") 序列或由单引号括起来的') 序列的罕见边缘情况。

The regx ... /\(\s*value\s*:\s*(['"]).*?\1\s*\)/g ... itself works like that ...

  • \(\s*value\s*:\s* ... 匹配单个 ( 后跟一个可选的空格(序列),后跟 value 后跟一个可选的空格(序列),然后是 :,再接着是又一个可选的(序列)空格,
  • (['"]) ... 捕获单引号或双引号的单次出现,
  • .*? ... 可选地以非贪婪的方式匹配任何字符(序列),直到下一个模式被匹配(并且读取)...
  • ...\1\s*\)...匹配捕获的引用类型,后跟一个可选的(序列)空格,后跟一个)
  • regx 具有全局标志,以便不止一次匹配模式。

function stripParenthesizedValues(str) {
  return str.replace((/\(\s*value\s*:\s*(['"]).*?\1\s*\)/g), '').trim();
}

console.log(
  'stripParenthesizedValues(\' foo ((value : "hy\')t")\')  =>',
  `'${ stripParenthesizedValues(' foo (value : "hy\')t")') }'`
);
console.log(
  "stripParenthesizedValues(\"( value : 'hy\")t'  ) bar \")  =>",
  `'${ stripParenthesizedValues("( value : 'hy\")t'  ) bar ") }'`
);

console.log(
  `stripParenthesizedValues("( value : 'hy\")t ' ) foo ( value : 'hy\")t ' ) bar")  =>`,
  `'${ stripParenthesizedValues("( value : 'hy\")t ' ) foo ( value : 'hy\")t ' ) bar") }'`
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

【讨论】:

  • 仅供参考 - 引擎无法识别字符类内部的反向引用,例如 [^\1]。既然如此,它会将其视为八进制 \1\01\001。看这个例子\((ab)[^\1]+\1\) (abyyab)(abxyyab)
  • 感谢@Edward 注意到它。我相应地更改和改进了正则表达式。
猜你喜欢
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
相关资源
最近更新 更多