我有包含 5个字母的字符串。我想匹配那些包含连续字母的字母,例如:
abcde
-返回比赛
noqprs
-返回比赛
cdefg
-返回比赛
fghij
-返回比赛
但是
abcef
-不返回匹配项
abbcd
-不返回匹配项
我可以编写所有组合,但是正如您可以在Regex [A-Z]中编写的那样,我认为必须有更好的方法。
答案 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种可能性)更糟糕,但是它使其更易于扩展到其他情况。