我想提取字符串的一部分,允许短划线字符随机出现。在我的比赛中,我希望包含短划线字符。
假设我有这样的场景:
haystack = "arandomse-que-nce"
needle = "sequence"
我希望在另一端出现像se-que-nce
这样的字符串,这种情况下,正则表达式是什么样的?
答案 0 :(得分:3)
我会拆分字符串,然后按-*
加入;例如,在JavaScript中:
var needle = "sequence"
var regex = new RegExp(needle.split('').join('-*'))
var result = "arandomse-que-nce".match(regex) // ["se-que-nce"]
var result2 = "a-bad-sequ_ence".match(regex) // null
您还可以使用正则表达式在每个字符之间插入-*
:
var regex = new RegExp(needle.replace(/(?!$|^)/g, '-*'))
split
/ join
方法和replace
方法都为正则表达式返回's-*e-*q-*u-*e-*n-*c-*e'
。
如果你的字符串中有*
之类的字符,这些字符在正则表达式中有意义,你可能想要转义它们,如下所示:
var regex = new RegExp(needle.replace(/(?!$|^)/g, '-*')
.replace(/([-\\^$*+?.()|[\]{}])/g, '\\$1'))
然后,如果needle
为1+1
,那么它会为正则表达式提供1-*\+-*1
。
答案 1 :(得分:0)
您可以尝试使用:
s-?e-?q-?u-?e-?n-?c-?e
答案 2 :(得分:0)
s-*e-*q-*u-*e-*n-*c-*e-*
假设一行中有多个连字符是可以的。
编辑:Doorknob的拆分/加入解决方案很好,但要注意它只适用于非特殊字符(*,+等)的字符我不知道规格是什么,但如果有特殊字符,请务必逃避:
new RegExp(needle.split('').map(function(c) { return '\\' + c; }).join('-*'))