regex 对于只有一个点的十进制数,正则表达式使用replace()方法

5uzkadbs  于 2023-05-23  发布在  其他
关注(0)|答案(4)|浏览(114)

我只是想如果有人输入10.01.1,那么它将是10.011 &如果有人输入10.00.........................................................................................................................................................................................................................
我试过这个.replace(/(\d*)(\.){1,1}(\d*)(?=(\.)+)/g,'$1')。但对我没用

fbcarpbf

fbcarpbf1#

你可以数一数这些点,然后用一个点代替第一个点,其余的去掉这个点。

function singleDot(s) {
    return s.replace(/\./g, (c => _ => c++ ? '' : '.')(0));
}

console.log(['0.0', '0....0', '0.0...1'].map(singleDot));
agyaoht7

agyaoht72#

您可以使用split和点作为分隔符:

const strings = [
  "10.01.1",
  "10.00............1",
  "100",
  ""
];
strings.forEach((s) => {
  const [head, ...rest] = s.split('.');
  console.log(rest.length ? head + '.' + rest.join('') : head);
});
w6mmgewl

w6mmgewl3#

如果你只想通过正则表达式来完成,你可以搜索一个交替,它捕获了你的第一个句点,但只是简单地匹配每一个其他的句点,用捕获的组替换。由于捕获的字符串对于未捕获的匹配项将为空,因此只有第一个句点组被其自身替换,而其他句点组被删除。参见regex demo
搜索:

(^\d*\.)|\.

替换为$1

nnsrf1az

nnsrf1az4#

试试/[^\d.\s]|(?<=\.\d*)\./g;简而言之,替换除数字0-9、“.”和空格之外的所有字符,或者任何前面有“.”和零个或多个数字0-9的“.”。正后看(?<=)确保任何在其之前具有“.”的“.”将被替换,这意味着每个组的第一个“.”将被替换。请注意,每个由空格或新行分隔的组都被认为是一个单独的数字,因为替换任何\s
| 分段|说明|
| - -----|- -----|
|

[^\d.\s]

|替换任何字符***但不替换***数字0-9、“.”和空白|
|

|

||
|

(?<=\.\d*)\.

|替换任何前面有“.”和零或更多数字0-9的“.”|
RegEx101

const rgx = /[^\d.\s]|(?<=\.\d*)\./g;
const str = `.08.2  5.880..
0.00..5.3
223...9.`;
const res = str.replace(rgx, "");

console.log(res);

相关问题