regex 如何在JavaScript中使用正则表达式删除除第一个字符以外的特定字符?

1hdlvixo  于 2023-08-08  发布在  Java
关注(0)|答案(5)|浏览(108)

所以,我有一个字符串类似于asd.asd.asd.234432$$..asd888。现在我想得到一个像.234432888这样的字符串。所以我想实现的是删除除了第一个点之外的所有点,并删除所有非数字字符。
我试过*string*.replace(/[^\d.]/gi, new String())。但是,它并不像预期的那样工作。

k97glaaz

k97glaaz1#

执行字符的全局正则表达式匹配:

  • (?<!\..*)-使用lookbehind否定Assert查找在任何距离(.*)之前没有..。这将是第一个遇到的.
  • \d+-查找所有数字
  • 加入找到的字符:
const str = 'asd.asd.asd.234432$$..asd888';

console.log(str.match(/(?<!\..*)\.|\d+/g).join(''));

字符串

41ik7eoe

41ik7eoe2#

您可以使用(?<=\.[^.]*)\.|[^\d.]+正则表达式并将其替换为空字符串。
这里(?<=\.[^.]*)\.部分匹配除第一个点以外的所有点,[^\d.]+匹配任何非数字非点的一个或多个字符。
Demo
JS代码演示

let s = 'asd.asd.asd.234432$$..asd888';
console.log(s, ' --> ', s.replace(/(?<=\.[^.]*)\.|[^\d.]+/g, ''));

字符串

pkbketx9

pkbketx93#

const inputString = 'asd.asd.asd.234432$$..asd888';

const transformedString = inputString.replace(/(\..*?)\./g, '$1').replace(/[^\d.]/g, '');

console.log(transformedString);

字符串

oug3syen

oug3syen4#

使用string.match()可实现且更简单:

string.match(/(\.)(?:[^0-8](\d+))*/).join('');

字符串
还有一件事你要注意在[]中,不能使用特殊语句,如\d-[\d]被视为“\d”。您需要使用字符范围,例如0-9

qgzx9mmu

qgzx9mmu5#

您可以匹配除数字或点以外的任何字符,如果点不是字符串中的第一个字符,则匹配点。
在替换中使用空字符串。

[^\d.]+|(?<!^[^.]*)\.

字符串

说明

  • [^\d.]+匹配1次或多次除数字或.以外的任何字符
  • |
  • (?<!^[^.]*)\.匹配一个.Assert,它不是从字符串开始的第一个。

Regex demo

const regex = /[^\d.]+|(?<!^[^.]*)\./g;
const s = "asd.asd.asd.234432$$..asd888";
console.log(s.replace(regex, ''));

相关问题