首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用正则表达式匹配和替换所有不是数字或破折号的字符?

如何用正则表达式匹配和替换所有不是数字或破折号的字符?
EN

Stack Overflow用户
提问于 2019-04-23 08:19:12
回答 2查看 368关注 0票数 2

我试图删除整个字符串中的所有非数字字符或未在字符串开头处使用regex的破折号(-)字符。我该怎么做?

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

代码语言:javascript
复制
stringToReplace.replace(/[^\d\-]/g, '')

使用这个和我试图实现的是允许负整数和删除所有其他东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-23 08:20:36

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

代码语言:javascript
复制
stringToReplace.replace(/(?!^)-|[^\d-]/g, '')

https://regex101.com/r/1xmeeV/1

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

代码语言:javascript
复制
const stringToReplace = '-12gh4-5';
const result = stringToReplace.replace(
  /^(-)?(.*)/,
  (_, start, rest) => start + rest.replace(/\D+/g, '')
);
console.log(result);

票数 0
EN

Stack Overflow用户

发布于 2019-04-23 08:51:28

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

  1. 逐个得到每个单词
  2. 校验词 2.1如果单词不以数字或破折号开头,则将第一个符号替换为破折号并返回。 2.2如果单词确实以数字或破折号开头,则按原样返回单词。

代码语言:javascript
复制
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"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55806988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档