【问题标题】:Javascript regex to replace part of substring not working as expected?Javascript 正则表达式替换部分子字符串未按预期工作?
【发布时间】:2022-12-05 00:59:34
【问题描述】:

我正在研究时间和子午线。

我可以有 '2:0 a. m.''2:0 am''3:0 p. m.''3:0 pm' 基本上我想做的是改变第一在第二当它发生时。

我的尝试:

console.info('2:0 a. m.'.replace(/(.*?\s)([ampAMP]*?)/, "$1")); // 2:0 a. m.

这个我真的看不懂。。。

'2:0 a. m.'.replace(/(.*?\s)([ampAMP]).*?([ampAMP])/, "$1"); // 2:0 .

这个可行,但看起来很奇怪,不确定这是最好的方法

'2:0 a. m.'.replace(/(.*?\s)([ampAMP]).*?([ampAMP]).*?$/, "$1$2$3");

当时我几乎无法删除子午线,但是如何在第一个空格之后替换所有不匹配[aAmMpP]的字符?

【问题讨论】:

标签: javascript regex replace substring match


【解决方案1】:

现在经过多次尝试这个作品,虽然不是很干净

console.info('2:0 a. m.'.replace(/(.*?s)([ampAMP]).*?([ampAMP]).*?$/, "$1$2$3"));

【讨论】:

    【解决方案2】:

    替换文本“a. m.”或“am”加上“am”和文字“p.m.”或字符串中包含“pm”的“pm”,您可以使用以下正则表达式:

    /^(.?s)(a.?sm|p.?s*m)/g

    此正则表达式将匹配文本“a. m”。或字符串开头的“am”(由 ^ 字符表示),在任意数量的字符后跟一个空格(由 .*?s 模式表示)。它还将匹配文本“p.m”。或以同样的方式“下午”。

    要在 replace() 方法中使用此正则表达式,您可以将其作为第一个参数传递,并将“am”或“pm”作为第二个参数传递,具体取决于匹配的文本。例如:

    '2:0 一个。 m.'.replace(/^(.?s)(a.?sm|p.?s*m)/g, "$1am"); // 返回“凌晨 2:0”

    '2:0 页m.'.replace(/^(.?s)(a.?sm|p.?s*m)/g, "$1pm"); // 返回 "2:0

    【讨论】:

      【解决方案3】:

      如果我理解正确的话第一在第二,这应该有效。

      const regex = /^([^s]s)([^aAmMpP])/;
      const string = '2:0 a. m.';
      const result = string.replace(regex, '$1am');
      
      console.log(result); // Output: '2:0 am'
      

      使用“/^([^s]s)([^aAmMpP])/”的正则表达式

      【讨论】:

      • 伙计,我不能写am,因为它可能是pm。应该是动态的...
      • 你真的应该测试你的代码。 “这应该工作" 很少提供好的或有用的答案。答案工具栏中的 sn-p 工具可以帮助您在提交之前编写/调试代码。
      • 我的意思是它有效,但我不明白他是不是这个意思,因为一开始并不是很具体。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      相关资源
      最近更新 更多