正则表达式匹配字符串并允许特定字符随机出现

时间:2013-11-25 21:54:53

标签: regex

我想提取字符串的一部分,允许短划线字符随机出现。在我的比赛中,我希望包含短划线字符。

假设我有这样的场景:

haystack = "arandomse-que-nce"
needle   = "sequence"

我希望在另一端出现像se-que-nce这样的字符串,这种情况下,正则表达式是什么样的?

3 个答案:

答案 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'))

然后,如果needle1+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('-*'))