【问题标题】:"AND" in Javascript regex... what am I missing?Javascript 正则表达式中的“AND”......我错过了什么?
【发布时间】:2015-04-04 00:07:57
【问题描述】:

我正在研究一个正则表达式,如果匹配的单词以任何顺序出现,它将返回 true。

这种方法(在此讨论:Regular Expressions: Is there an AND operator?

(?=.*tag1)(?=.*tag2)

在 Ruby 中匹配 tag1 tag2tag2 tag1 (http://rubular.com/r/374706hkft),但在 JavaScript 中不起作用。有什么想法吗?

编辑:“在 JS 中不起作用”我的意思是

"tag1 tag2".match(/(?=.*tag1)(?=.*tag2)/) 

返回[""]

这个问题的答案指出正则表达式的格式为

/(?=.*tag1)(?=.*tag2)/.test("tag1 tag2")

【问题讨论】:

  • 我很难看出它在任何正则表达式引擎中是如何工作的
  • 但是如果match 确实返回了一个数组(而不是null),它确实 匹配!请注意,您的正则表达式与空字符串匹配(当后跟 tag1 和当后跟 tag2 时),这确实是您输入的一部分。

标签: javascript regex regex-lookarounds


【解决方案1】:

该正则表达式在 JavaScript 中运行良好:

function check(s) {
    var found = /(?=.*tag1)(?=.*tag2)/.test(s);
    document.write(found + '<br>');
}

check('xxtag1xxxtag2xxxx'); // both found: true
check('xxtag2xxxtag1xxxx'); // both found: true
check('xxtag2xxxtag0xxxx'); // only one found: false

【讨论】:

  • /(?=.*tag1)(?=.*tag2)/.test('tag1 tag2') 有效,但"tag1 tag2".match(/(?=.*tag1)(?=.*tag2)/) 返回[""]。你能告诉我为什么一种格式会返回与另一种不同的结果吗?
  • @aaandre:测试返回一个布尔值,而不是匹配结果。它们是不同的方法!
  • @aaandre:当字符串包含tag1tag2 时,该模式匹配零长度字符串。 test 方法在匹配时返回 true,并且存在。 match 方法返回匹配项,长度为零的字符串就是匹配项。如果该模式的内容超出了前瞻匹配项,则匹配项将超过零长度字符串。
猜你喜欢
  • 2010-12-17
  • 2022-07-27
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多