正则表达式可找到5个连续的字母(例如abcde,noprst)

时间:2020-06-08 17:37:44

标签: javascript regex

我有包含 5个字母的字符串。我想匹配那些包含连续字母的字母,例如:

abcde-返回比赛

noqprs-返回比赛

cdefg-返回比赛

fghij-返回比赛

但是

abcef-不返回匹配项

abbcd-不返回匹配项

我可以编写所有组合,但是正如您可以在Regex [A-Z]中编写的那样,我认为必须有更好的方法。

4 个答案:

答案 0 :(得分:4)

一个非常简单的替代方法是只使用String.prototype.includes

{
    "key_1":["value_1","value_3"]
    ,"key_2":["value_2","value_4"]
}

答案 1 :(得分:1)

使用javascript的替代方法:

let string1 = 'abcde'
let string2 = 'fghiz'


function conletters(string) {
  if(string.length > 5 || typeof string != 'string') throw '[ERROR] not string or string greater than 5'
  for(let i = 0; i < string.length - 1; i++) {
    if(!(string.charCodeAt(i) + 1 == string.charCodeAt(i + 1)))
      return false
  }
  return true
}


console.log('string1 is consecutive: ' + conletters(string1))
console.log('string2 is consecutive: ' + conletters(string2))

答案 2 :(得分:1)

如果您可以使用Python,则此函数会将字符串序列转换为带编号的字符,并检查它们是否有意义(如果是,则它们也按字母顺序连续):

def are_letters_consequtive(text):
    nums = [ord(letter) for letter in text]
    if sorted(nums) == list(range(min(nums), max(nums)+1)):
        return "match"
    return "no match"


print(are_letters_consequtive('abcde'))
print(are_letters_consequtive('cdefg'))
print(are_letters_consequtive('fghij'))

print(are_letters_consequtive('abcef'))
print(are_letters_consequtive('abbcd'))
print(are_letters_consequtive('noprst'))

输出:

match
match
match
no match
no match
no match

答案 3 :(得分:1)

您绝对应该使用代码来做到这一点:

有些人遇到问题时会认为“我知道,我会使用正则表达式”。现在他们有两个问题。

也就是说,使用正则表达式比测试所有组合要好。使用前瞻表达式,您基本上可以执行“与”运算。因为您知道长度,所以可以:

const myRegex = /(?=^(ab|bc)...$)(?=^.(ab|bc)..$)(?=^..(ab|bc).$)(?=^...(ab|bc)$)/

您将需要用所有可能的两种组合替换(ab | bc)。

对于这种特殊情况,实际上比测试所有可能性(因为只有22种可能性)更糟糕,但是它使其更易于扩展到其他情况。