所以,我有一个字符串类似于asd.asd.asd.234432$$..asd888。现在我想得到一个像.234432888这样的字符串。所以我想实现的是删除除了第一个点之外的所有点,并删除所有非数字字符。我试过*string*.replace(/[^\d.]/gi, new String())。但是,它并不像预期的那样工作。
asd.asd.asd.234432$$..asd888
.234432888
*string*.replace(/[^\d.]/gi, new String())
k97glaaz1#
执行字符的全局正则表达式匹配:
(?<!\..*)
.*
.
\d+
const str = 'asd.asd.asd.234432$$..asd888'; console.log(str.match(/(?<!\..*)\.|\d+/g).join(''));
字符串
41ik7eoe2#
您可以使用(?<=\.[^.]*)\.|[^\d.]+正则表达式并将其替换为空字符串。这里(?<=\.[^.]*)\.部分匹配除第一个点以外的所有点,[^\d.]+匹配任何非数字非点的一个或多个字符。DemoJS代码演示
(?<=\.[^.]*)\.|[^\d.]+
(?<=\.[^.]*)\.
[^\d.]+
let s = 'asd.asd.asd.234432$$..asd888'; console.log(s, ' --> ', s.replace(/(?<=\.[^.]*)\.|[^\d.]+/g, ''));
pkbketx93#
const inputString = 'asd.asd.asd.234432$$..asd888'; const transformedString = inputString.replace(/(\..*?)\./g, '$1').replace(/[^\d.]/g, ''); console.log(transformedString);
oug3syen4#
使用string.match()可实现且更简单:
string.match()
string.match(/(\.)(?:[^0-8](\d+))*/).join('');
字符串还有一件事你要注意在[]中,不能使用特殊语句,如\d-[\d]被视为“\或d”。您需要使用字符范围,例如0-9。
[]
\d
[\d]
\
d
0-9
qgzx9mmu5#
您可以匹配除数字或点以外的任何字符,如果点不是字符串中的第一个字符,则匹配点。在替换中使用空字符串。
[^\d.]+|(?<!^[^.]*)\.
说明
|
(?<!^[^.]*)\.
Regex demo
const regex = /[^\d.]+|(?<!^[^.]*)\./g; const s = "asd.asd.asd.234432$$..asd888"; console.log(s.replace(regex, ''));
型
5条答案
按热度按时间k97glaaz1#
执行字符的全局正则表达式匹配:
(?<!\..*)
-使用lookbehind否定Assert查找在任何距离(.*
)之前没有.
的.
。这将是第一个遇到的.
。\d+
-查找所有数字字符串
41ik7eoe2#
您可以使用
(?<=\.[^.]*)\.|[^\d.]+
正则表达式并将其替换为空字符串。这里
(?<=\.[^.]*)\.
部分匹配除第一个点以外的所有点,[^\d.]+
匹配任何非数字非点的一个或多个字符。Demo
JS代码演示
字符串
pkbketx93#
字符串
oug3syen4#
使用
string.match()
可实现且更简单:字符串
还有一件事你要注意在
[]
中,不能使用特殊语句,如\d
-[\d]
被视为“\
或d
”。您需要使用字符范围,例如0-9
。qgzx9mmu5#
您可以匹配除数字或点以外的任何字符,如果点不是字符串中的第一个字符,则匹配点。
在替换中使用空字符串。
字符串
说明
[^\d.]+
匹配1次或多次除数字或.
以外的任何字符|
或(?<!^[^.]*)\.
匹配一个.
Assert,它不是从字符串开始的第一个。Regex demo
型