为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式 - 在最后一个连字符/破折号之前提取文本

正则表达式 - 在最后一个连字符/破折号之前提取文本

慕少森 2023-05-11 14:31:22
Example data                         expected output   sds-rwewr-dddd-cash0-bbb              cash0rrse-cash1-nonre                      cash1loan-snk-cash2-ssdd                   cash2garb-cash3-dfgfd                      cash3loan-unwan-cash4-something            cash4通用模式在这里,需要在给定字符串的最后一个连字符之前提取几个字符。var regex1= /.*(?=(?:-[^-]*){1}$)/g ;       //output will be "ds-rwewr-dddd-cash0" from "sds-rwewr-dddd-cash0-bbb  "var regex2 = /\w[^-]*$/g ;       //output will be "cash0" from "ds-rwewr-dddd-cash0"var res =regex2.exec(regex1.exec(sds-rwewr-dddd-cash0-bbb)) //output will cash0虽然上面嵌套的正则表达式按预期工作但可能不是优化的。因此,对于优化正则表达式的任何帮助将不胜感激
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您可以使用

/\w+(?=-[^-]*$)/

如果最后一个连字符之前的部分可以包含除单词字符之外的字符,请继续使用\w[^-]*/\w[^-]*(?=-[^-]*$)/。如果您不需要检查匹配项的第一个字符,只需使用/[^-]+(?=-[^-]*$)/.

细节:

  • \w+- 一个或多个单词字符

  • (?=-[^-]*$)- 必须跟在后面-,然后是零个或多个字符,直到-字符串结尾。

JavaScript 演示

const texts = ['sds-rwewr-dddd-cash0-bbb','rrse-cash1-nonre','loan-snk-cash2-ssdd','garb-cash3-dfgfd','loan-unwan-cash4-something'];

const regex = /\w+(?=-[^-]*$)/;

for (var text of texts) {

  console.log(text, '=>', text.match(regex)?.[0]);

}


查看完整回答
反对 回复 2023-05-11
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信