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]);
}
添加回答
举报
0/150
提交
取消