我试图删除整个字符串中的所有非数字字符或未在字符串开头处使用regex的破折号(-)字符。我该怎么做?
最近的是[^\d\-],但我不知道如何只允许-在字符串的开头。
stringToReplace.replace(/[^\d\-]/g, '')使用这个和我试图实现的是允许负整数和删除所有其他东西。
发布于 2019-04-23 08:20:36
在匹配破折号时,可以对^进行负面展望,并与[^\d-]交替使用(注意,-不需要在字符集中转义):
stringToReplace.replace(/(?!^)-|[^\d-]/g, '')https://regex101.com/r/1xmeeV/1
不过,我认为如果使用替换器函数,逻辑可能会更清楚:可以在字符串的开头匹配-,而在字符串的其余部分,匹配非数字字符并用空字符串替换:
const stringToReplace = '-12gh4-5';
const result = stringToReplace.replace(
/^(-)?(.*)/,
(_, start, rest) => start + rest.replace(/\D+/g, '')
);
console.log(result);
发布于 2019-04-23 08:51:28
听起来你想做的是检查每个单词是以数字还是以破折号开头。要做到这一点,有两个步骤:
function startDashOrNumber(stringPart) {
if (stringPart.search(/^(-|\d)/i) < 0) {
return '-' + stringPart.substr(1);
}
return stringPart;
}
function breakIntoWords(str) {
return str.replace(/\S+/igm, startDashOrNumber);
}
//TEST
console.log(breakIntoWords("-Lorem 1ipsum dolor sit lamet"));
https://stackoverflow.com/questions/55806988
复制相似问题