【问题标题】:Remove forward slash but not date format in a string REGEX删除字符串 REGEX 中的正斜杠但不删除日期格式
【发布时间】:2019-08-02 13:21:46
【问题描述】:

我有以下格式的字符串

Pending status started at 11/03/2019 11:32
User: XY_Z
moj/f112
Reason: Linked to Major/P1 Ticket

在上述情况下,我想删除 moj/f112Major/P1 中的正斜杠 (/),但不删除日期中的正斜杠 (/),即 11/03/2019

我尝试了\D\/\D/ig,但随后它会选择所有正斜杠并进行一些试验,例如^(\d{2}\/\d{2}\/\d{4})(and ?)\D\/\D/ig。 我不习惯使用正则表达式,而且时间紧迫。

有什么帮助吗?

提前非常感谢。 :)

【问题讨论】:

  • 您提供的正则表达式与给定的字符串不匹配

标签: javascript regex


【解决方案1】:

您可以使用此交替正则表达式首先匹配和分组您想要保留的内容,然后匹配 / 作为最后一个选项:

var str = `Pending status started at 11/03/2019 11:32
User: XY_Z
moj/f112
Reason: Linked to Major/P1 Ticket`

var re = /(\b(?:\d{1,2}\/){2}\d{4}\b)|\//

var repl = str.replace(re, '$1')

console.log(repl)

RegEx Demo

【讨论】:

  • 这确实是一个聪明的解决方案(因为它不依赖于并非在所有 JavaScript 环境中都可用的lookbehinds),因为其他解决方案要么是错误的,要么是部分工作的,但他们仍然收到了赞成票这个确实值得投票的,还没有收到。不确定,顶级正则表达式的想法是什么。接受我的投票,我希望我能为这样聪明的答案做更多的事情。
  • @PushpeshKumarRajwanshi:谢谢你的好话。我也很困惑,当有一个简单的替代方案可用时,为什么有人会寻找花哨且不合规的解决方案。此外,在 / 不在日期字符串中的许多情况下,例如 abc/$ 1A/2 12/15 10/xy
  • 没错,我能想到的唯一原因是,他们可能无法理解它,尽管它是简单而精确的解决方案,而且确实是明智的解决方案。也许他们应该花一些时间来获得您的解决方案。
【解决方案2】:

这个正则表达式将匹配 {slash + two digits + slash} 和其余的斜线,然后我们可以替换其余的斜线。

const str = `Pending status started at 11/03/2019 11:32
User: XY_Z
moj/f112
Reason: Linked to Major/P1 Ticket`;

const regex = /(\/\d{2}\/)|\//g;
let modifiedStr = str.replace(regex, '$1');
console.log(modifiedStr)

Working example

【讨论】:

  • @SalimShamim 它将在 Chrome 和其他支持 ECMAScript 2018 标准的 JS 环境中工作。它不适用于 Firefox 和 IE。
  • 除了不合规问题外,在/不在日期字符串中的许多情况下,它不会删除/,例如abc/$ 1A/2 12/15 10/xy
  • 无法在节点中工作-Invalid regular expression: /(?<=[a-zA-Z])(\/)(?=[a-zA-Z])/: Invalid group
【解决方案3】:

这是另一种选择。

var str = `Pending status started at 11/03/2019 11:32
User: XY_Z
moj/f112
Reason: Linked to Major/P1 Ticket`;

var newString = str.replace(/[^\d{1,2}\/\d{1,2}\/\d{4}]\//gm, '');

console.log(newString);

【讨论】:

  • 这是错误的,因为否定字符类不能否定模式序列,它们只能否定单个字符模式。
  • 运行 sn-p,删除 '/' 之前的一个字符,即 Major/P1 更改为 MajoP1 而不是 MajorP1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2012-07-18
相关资源
最近更新 更多