正则匹配-后面的字符串

带-取中划线后面的,不带取当前
dingdan-danhao => danhao
dingdan => dingdan

let str = dingdan-danhao

阅读 6.1k
6 个回答

str.match(/\w+$/)[0]
-刚好是不属于\w的字符。如果单词是空格或者其他不属于\w的字符分隔但仍然要匹配的话那就换成:
str.match(/[^-]+$/)[0]

大概明白了意思,优先取-后的值,不满足则取当前字符串。
看使用场景,如果a-b-c...,取最后-后的值的场景下,
1.分割方法,简单明了,按照分割符分割后,取最后一个有效值。
字符串.split("-").pop()
2.正则, 通过替换的方式,其中\w根据具体情况去调整。
字符串.replace(/\w+-/g,"")

这个正则就能匹配啊
/(?!.*-).+/

非正则写法

function cb(string = ''){
  const arr = string.split('-')
  return arr[1] || arr[0]
}

let str = 'dingdan-danhao'

cb(str) // 'danhao'
let str = 'dingdan-danhao'
str = str.split('-')[1] || str // 'danhao'

str = str.replace(/\w+-/g, '')

const str = "dingdan-danhao";
const match = /-([^\-]+)/.exec(str) ?? [];
const result = match[1] ?? str;
console.dir(result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题