如何使用正则表达式匹配并替换所有不是数字或短划线的字符作为第一个字符?

问题描述 投票:2回答:2

我试图删除整个字符串中的所有非数字字符或破折号( - )字符不是在正则表达式的字符串的开头。我该怎么做呢?

我最近来的是[^\d\-],但我无法弄清楚如何只允许 - 在字符串的开头。

stringToReplace.replace(/[^\d\-]/g, '')

使用这个和我想要实现的是允许负整数并删除其他所有内容。

javascript regex replace
2个回答
0
投票

当匹配短划线时,你可能对^负面预测,并与[^\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);

0
投票

听起来你想要做的就是检查每个单词是以数字还是破折号开头。要做到这一点,有两个步骤:

  1. 单独获取每个单词
  2. 检查一下 2.1如果单词不以数字或短划线开头,请用短划线替换第一个符号并返回。 2.2如果单词以数字或短划线开头,则按原样返回单词。

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"));
© www.soinside.com 2019 - 2024. All rights reserved.