匹配字符串中的单词,无论它们之间是什么

时间:2019-01-16 13:49:51

标签: javascript regex string string-matching

我想检查是否所有“ do”“ drugs”都以相同的频率和顺序出现在字符串中,而不管两者之间是什么。

例如,它应该匹配:

"Everyone go do drugs"

"Everyone go d[o] dru]gs!"

"Everyone go do[heyyo]dr--ugs"

正则表达式似乎不是正确的方法。我该怎么办?

2 个答案:

答案 0 :(得分:1)

此正则表达式不是您想要的吗?

/^.*d.*o.*d.*r.*u.*g.*s.*$/i

使用此正则表达式,您可以改变之间的符号数量

/^.*d.{0,10}o.{0,10}d.{0,10}r.{0,10}u.{0,10}g.{0,10}s.*$/i

如果您以前没有遇到https://regex101.com/,请看看。这是学习和实验的好地方

答案 1 :(得分:1)

您可以做的是先检查string中所有regex中的特殊字符:

  1. 使用.replace(/[^\w\s]/gi, '')string中删除所有特殊字符。
  2. 使用/do.+drugs/作为正则表达式来检查字符串是否符合所需的模式。

演示:

let inputs = ["Everyone go do drugs",
  "Everyone go d[o] dru]gs!",
  "Everyone go do[heyyo]dr--ugs"
];

inputs = inputs.map(i => i.replace(/[^\w\s]/gi, ''));

inputs.forEach(i => {
  console.log(i + ":   " + i.match(/do.+drugs/));
});