【问题标题】:Regex to match 32-character mixed-char string正则表达式匹配 32 个字符的混合字符字符串
【发布时间】:2018-03-15 05:22:43
【问题描述】:

我需要 Javascript 正则表达式来匹配这样的字符串...

loYm9vYzE6Z-aaj5lL_Og539wFer0KfD

pxeGxvYzE6o97T7OD2mu_qowJdqR7NRc

gwaXhuYzE6l3r1wh5ZdSkJvtK6uSw11d

它们是 32 个字符的字符串,混合了字母、数字、标点和大小写。

我一直在使用 /[\w-]{32}/g(实际上是 var matches = inputData.body.match(/[\w-]{32}/g)) - 但我只是注意到它错误地从长度超过 32 个字符的字符串中提取匹配的字符串。

也就是说,它在

中找到了

"aHR0cHM6Ly9hcHAuZTJtYS5uZXQvYXBwMi9hdWRpZW5jZS9vcHRfb3V0LzE0‌​MDEwMTQvMTQwMDgxNC81‌​NjQ2MzE4Lw==", 两个字符串“aHR0cHM6Ly9hcHAuZTJtYS5uZXQvYXBw”和 “Mi9hdWRpZW5jZS9vcHRfb3V0LzE0MDEw”。

这不是正确的行为——我不想匹配一个 32 个字符的字符串,它只是一个较长字符串的一部分,尽管这不太可能。我需要使用单词边界吗?

那会是像/b/[\w-]{32}/g/b 这样的东西吗?我不清楚结构。

【问题讨论】:

  • 是的,单词边界 (\b) 应该可以为您解决这个问题。唯一的问题是您使用的是/ 而不是\,并且您第二次使用\b 被放置在g 全局修饰符的右侧,这实际上是在正则表达式模式之外。
  • 那我要\b/[\w-]{32}\b/g吗?我应该双斜线任何一个 \bs 吗?
  • 差不多。正斜杠表示许多语言中正则表达式模式的开头和结尾,就像字符串周围的引号一样。你要找的是/\b[\w-]{32}\b/g

标签: javascript regex


【解决方案1】:

根据文件中的格式和分隔符,您可以通过多种方式执行此操作:

`\b[\w-]{32}\b` 

会在值周围强制单词边界

`\s[\w-]{32}\s` 

将强制在值周围留空白

`^[\w-]{32}$` 

将只匹配具有 32 个字符值的行

`(?!([\w-=]{33})[\w-]{32}` 

将匹配任何 32 个字符的字符串,除非存在 33 个字符的字符串,否则 equal 将专门从包含后续排除字符的 alpha num 字符串中排除最后一个可用的匹配项。但是,要使其适用于任何更长的字符串,除了提供的示例之外,它需要与我给出的前 2 个示例之一结合使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多