【问题标题】:What does this `/^.*$/` regex match?这个 `/^.*$/` 正则表达式匹配什么?
【发布时间】:2013-05-10 08:10:21
【问题描述】:

当我遇到麻烦时,我正在维护一些旧代码。我对这种正则表达式模式感到困惑:/^.*$/(作为textFieldValidation(this,'true',/^.*$/,'','' 中的参数提供)。

我将此正则表达式解释为:

  • /^=打开模式
  • .=匹配任意值的单个字符(EOL 除外)
  • *=匹配 0 次或多次
  • $=匹配行尾
  • /=关闭模式

所以……我认为这个模式匹配所有内容,这意味着该函数除了浪费处理周期之外什么都不做。我对么?

【问题讨论】:

  • 我的程序员感觉很刺痛,一个javascript函数中有五个参数,其中一个是'true'。这可不好
  • @NicoSantangelo:太可怕了

标签: javascript regex


【解决方案1】:

匹配单行文本。

它将无法匹配多行字符串,因为^ 匹配输入的开头,$ 匹配输入的结尾。如果中间有任何新行 (\n) 或脱字符返回 (\r) 符号 - 它会失败。

例如,'foo'.match(/^.*$/) 返回foo

但是'foo\nfoo'.match(/^.*$/) 返回null

【讨论】:

  • 请注意,它也将无法匹配包含 '\r' 的字符串。
  • 除非你向正则表达式引擎提供一个参数,告诉它匹配.中的\n...
【解决方案2】:

^ "从头开始。"
. "匹配任何东西..."
* "0次或多次"
$ "到结尾行。”

是的,你是对的,匹配空或其他东西。

还有a handy little cheat sheet.

【讨论】:

    【解决方案3】:

    正则表达式检查字符串不包含任何\n\r。点与换行符不匹配。

    例子:

    /^.*$/.test("");  // => true
    /^.*$/.test("aoeu");  // => true
    /^.*$/.test("aoeu\n");  // => false
    /^.*$/.test("\n");  // => false
    /^.*$/.test("aoeu\nfoo");  // => false
    /^.*$/.test("\nfoo");  // => false
    

    【讨论】:

      【解决方案4】:

      是的,你说的很对。此正则表达式匹配任何不包含 EOL 的字符串(如果 dotall=false)或任何字符串(如果 dotall=true)

      【讨论】:

      • 我觉得JS没有dotall。
      • 我不知道正则表达式在 JS 中是如何实现的,但是在其他语言中,dotall 可以通过 /../s 或将标志传递给编译函数来启用
      猜你喜欢
      • 1970-01-01
      • 2018-08-24
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2011-09-17
      • 2014-05-14
      相关资源
      最近更新 更多