Javascript 如何将所有不是数字或破折号的字符作为第一个字符匹配并替换为正则表达式?

Javascript 如何将所有不是数字或破折号的字符作为第一个字符匹配并替换为正则表达式?,javascript,regex,replace,Javascript,Regex,Replace,我正在尝试删除整个字符串中的所有非数字字符或不在正则表达式字符串开头的破折号(-)字符。我该怎么做 最接近我的是[^\d\-],但我不知道如何只允许-在字符串的开头 stringToReplace.replace(/[^\d\-]/g, '') 这一点以及我试图实现的用途是允许负整数,并删除所有其他内容。在匹配破折号时,可以对^进行负前瞻,并使用[^\d-](注意-不需要在字符集中转义): 我认为,如果使用替换函数,逻辑可能更清晰:可以选择在字符串开头匹配-,在字符串的其余部分,匹配非数字字

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

最接近我的是
[^\d\-]
,但我不知道如何只允许-在字符串的开头

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

这一点以及我试图实现的用途是允许负整数,并删除所有其他内容。

在匹配破折号时,可以对
^
进行负前瞻,并使用
[^\d-]
(注意
-
不需要在字符集中转义):

我认为,如果使用替换函数,逻辑可能更清晰:可以选择在字符串开头匹配
-
,在字符串的其余部分,匹配非数字字符并替换为空字符串:

const stringToReplace='-12gh4-5';
const result=stringToReplace.replace(
/^(-)?(.*)/,
(\u,start,rest)=>start+rest.replace(/\D+/g',)
);

控制台日志(结果)听起来你想做的是检查每个单词是以数字开头还是以破折号开头。为此,有两个步骤:

  • 每个单词都要单独读
  • 校验字

    2.1如果单词不是以数字或破折号开头,请将第一个符号替换为破折号并返回

    2.2如果单词以数字或破折号开头,请按原样返回单词

  • 功能启动DASHORNUMBER(stringPart){
    if(stringPart.search(/^(-|\d)/i)<0){
    返回'-'+stringPart.substr(1);
    }
    返回部件;
    }
    函数分解词(str){
    返回str.replace(/\S+/igm,startDashOrNumber);
    }
    //试验
    console.log(分词(“-Lorem 1ipsum dolor sit lamet”)
    
    stringToReplace.replace(/(?!^)-|[^\d-]/g, '')