我试图删除整个字符串中的所有非数字字符或破折号( - )字符不是在正则表达式的字符串的开头。我该怎么做呢?
我最近来的是[^\d\-]
,但我无法弄清楚如何只允许 - 在字符串的开头。
stringToReplace.replace(/[^\d\-]/g, '')
使用这个和我想要实现的是允许负整数并删除其他所有内容。
当匹配短划线时,你可能对^
负面预测,并与[^\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);
听起来你想要做的就是检查每个单词是以数字还是破折号开头。要做到这一点,有两个步骤:
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"));