簡體   English   中英

JavaScript中的正則表達式,如果使用分組后跟問號,則始終為“未定義”

[英]Regular expression in JavaScript, always ‘undefined’ if use a grouping followed by a question mark

我想要做的是提取匹配的模式,但其中一個模式可以是可選的。 讓我們直接舉例。

我想要匹配的目標文本是,

<foo>\n<bar>\n#####<foo>\n#####<bar>

我的正則表達式是,

/(#{5})?/

我使用的原因是什么?這是因為特定的模式可以是可選的。例如,我不希望匹配完全是一個錯過,而不僅僅是這個模式的'undefined'。

我期望str.match()返回的是,

[ '#####',
  '#####',
  index: 12,
  input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]

但實際上是,

[ '',
  undefined,
  index: 0,
  input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]

如果我使用以下模式,它將工作正常。

/(#{5})+/

為什么?

我在nodejs / chrome和IE中嘗試了這個,但是沒有一個工作,這意味着這個行為在JS引擎中是一致的。 但它的行為與我嘗試過的眾多工具之一的行為方式不同, regexpal 我不確定這是工具本身的問題還是只是不同的實現。

var re = /(#{5})/;
console.log ("<foo>\n<bar>\n#####<foo>\n#####<bar>".match (re));
console.log ("<foo>\n<bar>\nfoo>\n<bar>".match (re));

輸出:

[ '#####',
  '#####',
  index: 12,
  input: '<foo>\n<bar>\n#####<foo>\n#####<bar>' ]
null

如果它是可選的,則regexp在沒有匹配時失敗,如果失敗則返回null。

> /a/.exec("a")
[ 'a', index: 0, input: 'a' ]
> /a/.exec("b")
null
> "a".match(/a/)
[ 'a', index: 0, input: 'a' ]
> "b".match(/a/)
null

另外,不要使用String#match(),它比RegExp #exec()慢,並且都返回相同:

match()vs exec()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM