【问题标题】:Javascript Regular Expression for a string that contains one or more of specified letters包含一个或多个指定字母的字符串的 Javascript 正则表达式
【发布时间】:2019-01-03 21:58:19
【问题描述】:

我正在使用以下正则表达式在英文单词数组中搜索字符串主体中任何位置包含字母 C、A、L、I、R、E、T、N 的所有字符串:

const regex = /\b(?=\w*C)(?=\w*A)(?=\w*L)(?=\w*I)(?=\w*R)(?=\w*E)(?=\w*T)(?=\w*N)\w+/ig;

这是我的 JavaScript (https://jsfiddle.net/jarosciak/7tk4aL0h/),它演示了在一组英文单词中搜索时的上述示例: 脚本会成功找到单词:

CLARINET

这对我来说是一个好的开始,但我确实需要正则表达式来查找包含我指定的大部分字母的所有单词(字符串):

例如,如果我指定字母:X、C、L、A、R、I、N、E、T。 它应该找到单词:CLARINET,尽管我也将 X 指定为要搜索的字母之一。

我可以在 SQL 中毫无问题地执行此操作,但我无法弄清楚如何在 REGEX 中执行此操作。如果有帮助,这是一个有效的 SQL 示例:

【问题讨论】:

  • 你的SQL中@regex的值已经包含了你想要的正则表达式。那么,为什么不在 Javascript 中使用它呢?
  • 大多数字母中的符合什么条件?您是否将正则表达式与多个输入字符串进行匹配?
  • 嗨@revo,实际上我是在得到一个与我在正则表达式查询中指定的最多字母匹配的单词之后,但这不太可能是我能做的。尽管如此,想想看,最长的字母应该是最正确的答案。

标签: javascript sql regex


【解决方案1】:

遵循正则表达式将仅按顺序找到 Carinet。你的问题没有提到 CLARINET 是否会按顺序出现,或者它是否会像 CLRIATEN 这样的任何顺序出现。但是根据你的数据和我的假设,它会按顺序出现,给你。您可以通过添加 /i 来更改正则表达式以不区分大小写。

正则表达式:'(CLARINET)+'

如果您认为单词可以出现在文本中的任何位置,例如包含所有这些单词的随机数据,您可以使用以下。

正则表达式:'[CLARINET]+'

【讨论】:

  • 第一件事显然是错误的,因为 OP 想要指定 XCLARINET 并且仍然匹配 CLARINET。您的方法可以改进,因为目前您的方法也将允许 fooCfoo ,因为它是未锚定的。
  • 第二个正则表达式可能是迄今为止我得到的最好的东西。我能够修改我的脚本以获得第一个也是最好的单词,其中包含我正在搜索的最多字符,它在这里:jsfiddle.net/jarosciak/u3oy6zd0
  • 我很高兴它有帮助。
猜你喜欢
  • 2018-10-29
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多