【问题标题】:How can I add two hyphens in an RegEx expression?如何在 RegEx 表达式中添加两个连字符?
【发布时间】:2023-02-07 20:27:28
【问题描述】:

我有一个值,我想添加两个连字符。

例如,如果我收到:

FN322KN

我想将其转换为:

FN-322-KN

我正在尝试使用此解决方案 (Mask javascript variable value),但我被困在这里:

代码:

变量值 = 'FN322KN';

var formatted = value.replace(/^(.{2})(.{5}).*/, '$1-$2');

结果:

'FN-322KN'

有人可以告诉我如何添加第二个“-”吗?

更新!!

Mark Ba​​ijens 和 Buttered_Toast 的答案都是正确的。不过我还有一个问题。如果值像 FN-322KN 或 F-N322-KN 一样怎么办?比如格式不对?因为如果是这种情况,那么它会在已经存在的地方添加一个 hifen,使其成为“--”。

谢谢!

【问题讨论】:

  • FN322KN这个字符串有什么逻辑可以匹配字符A-Z和数字吗?
  • 你总是想要前 2 个字符和前 5 个字符之后的连字符吗?
  • 每当 AZ 的字符后跟一个数字 ... /[A-Z](?=\d)/g ... 以及每当一个数字后跟 AZ 的字符时,OP 似乎都想要连字符... /\d(?=[A-Z])/g ... 这导致以下任一解决方案 ... 'FN322KN'.replace(/[A-Z](?=\d)/g, '$&-').replace(/\d(?=[A-Z])/g, '$&-'); ... 'FN322KN'.replace(/[A-Z](?=\d)|\d(?=[A-Z])/g, '$&-');
  • @NunoPacheco ...请OP确认一些评论的猜测或提出上述问题的精确制定的验收标准。

标签: javascript regex ecmascript-6


【解决方案1】:

假设您总是希望在前 2 个字符之后和前 5 个字符之后使用连字符,您可以轻松地将正则表达式更改为 3 组。

var value = 'FN322KN';
var formatted = value.replace(/^(.{2})(.{3})(.{2}).*/, '$1-$2-$3');
console.log(formatted);

【讨论】:

    【解决方案2】:

    根据您提供的内容,您可以试试这个

    (?=(.{5}|.{2})$)
    

    https://regex101.com/r/JZVivU/1

    const regex = /(?=(.{5}|.{2})$)/gm;
    
    // Alternative syntax using RegExp constructor
    // const regex = new RegExp('(?=(.{5}|.{2})$)', 'gm')
    
    const str = `FN322KN`;
    const subst = `-`;
    
    // The substituted value will be contained in the result variable
    const result = str.replace(regex, subst);
    
    console.log('Substitution result: ', result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      相关资源
      最近更新 更多