繁体   English   中英

如何使用javascript将给定的字符串更改为正则表达式修改的字符串

[英]How to change given string to regex modified string using javascript

示例字符串:

 2222 
 333333 
 12345 
 111
 123456789
 12345678

预期结果:

2@222
333@333
12@345
111
 123@456@789
 12@345@678

'@'应该插入在字符串末尾的第 4、8、12 等最后位置。

我相信这可以使用替换和 JavaScript 中的其他一些方法来完成。

为了验证输出字符串,我制作了正则表达式:

^(\d{1,3})(\.\d{3})*?$

您可以使用此正则表达式:

/(\d)(\d{3})$/

这将匹配和分组第一个数字\\d并将最后三个\\d{3}分组,然后将它们分组到他们自己的组中。 使用匹配的组,然后您可以使用$1$2在替换字符串中引用它们。

请参阅下面的示例:

 const transform = str => str.replace(/(\\d)(\\d{3})$/, '$1@$2'); console.log(transform("2222")); // 2@222 console.log(transform("333333")); // 333@333 console.log(transform("12345")); // 12@345 console.log(transform("111")); // 111

对于大小为N 的较大字符串,您可以使用其他方法,例如.match()并像这样反转字符串:

 const reverse = str => Array.from(str).reverse().join(''); const transform = str => { return reverse(reverse(str).match(/(\\d{1,3})/g).join('@')); } console.log(transform("2222")); // 2@222 console.log(transform("333333")); // 333@333 console.log(transform("12345")); // 12@345 console.log(transform("111")); // 111 console.log(transform("123456789")); // 123@456@789 console.log(transform("12345678")); // 12@345@678

 var test = [ '111', '2222', '333333', '12345', '123456789', '1234567890123456' ]; console.log(test.map(function (a) { return a.replace(/(?=(?:\\B\\d{3})+$)/g, '@'); }));

你可以匹配所有的数字。 在替换中,使用正向先行在右侧的每三个数字后插入一个@

(?=(?:\B\d{3})+$)
  • (?=正向前瞻,右边是
    • (?:\\B\\d{3})+重复 1+ 次非字边界和 3 个数字
  • $断言字符串结束
  • )关闭前瞻

正则表达式演示

 const regex = /^\\d+$/; ["2222", "333333", "12345", "111", "123456789", "12345678" ].forEach(s => console.log( s.replace(/(?=(?:\\B\\d{3})+$)/g, "@") ));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM