replace() 怎么匹配固定长度?

const str= `***:****-*****-***——**`
const reg= /(\*\*\*)/g

console.log(str.match(reg)) // ["***", "***", "***","***"]

怎么取固定长度的‘*’我只是想要长度为3个星号的字串(***)
要怎么才能取得呐?

阅读 2.6k
2 个回答

str.match(/(?<=[^\*]|^)(\*{3})(?=[^\*]|$)/g)

应该没啥好办法,不过可以通过匹配结果然后去取长度为 3 的结果。
比如说

const str= `***:****-*****-***——**`
const reg= /(\*){1,}/g

const result = str.match(reg).filter(item=>item.length==3)
console.log(result) // ["***", "***"]

但是这样就不知道字符串所在的位置了,如果你要做替换的话。
所以可以将 replace/replaceAll 的第二个参数改为一个函数,那么稍微修一下:

const str= `***:****-*****-***——**`
const reg= /(\*){1,}/g

const newStr = str.replaceAll(reg, (match)=>{
    if(match.length === 3) return '被替换'
    return match
});
console.log(newStr) // '被替换:****-*****-被替换——**'

参考文档

String.prototype.replace() - JavaScript | MDN
String.prototype.replaceAll() - JavaScript | MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏