【问题标题】:Regex match between two quotes两个引号之间的正则表达式匹配
【发布时间】:2012-01-09 19:33:18
【问题描述】:

这是我要匹配的字符串类型

(字符串是单引号分隔的(想想var str = '"hi, what"s up, what a nice day"';)):

  1. ' "This is a str"'
  2. ' "This is also a str "
  3. '"So is this'
  4. '"This should "also match un"til th"e last "'

在每种情况下,如果第一个 dquote 之前只有空格直到最后一个引号(这是完全可选的),它应该捕获第一个 dquote 之后的任何内容。

另外,只包含 " 的字符串不应该匹配 ex '""""""""""""' 根本不应该匹配。

引号之间和引号之外的前导和尾随空格也将被忽略。

这是我目前的正则表达式:

/^\s*\"\s*(.*?)\s*(?:\"\s*)?$

但它也得到'""""""""""""""""',所以这就是我卡住的地方。

我该怎么做才能不匹配整个字符串?

编辑:

我想我解释了我想要的错误,我希望它匹配一串 dquotes 但不 capture 任何一个

【问题讨论】:

标签: javascript regex


【解决方案1】:

您可以更改您的正则表达式,使内容至少包含一个非" 字符:

/^\s*\"\s*(.*?[^"].*?)\s*(?:\"\s*)?$/

更新:如果您不想捕获开头和结尾的 ",只需在边界处允许其中几个:

/^\s*\"+\s*(.*?)\s*(?:\"+\s*)?$/

【讨论】:

  • 我不清楚,我的意思是我希望它匹配字符串但不捕获任何内容。 +1 回答我的问题,即使这不是我的意思
  • 不,我的意思是,如果整个字符串是 dquotes,我希望它与字符串匹配,但不捕获它的任何部分。这意味着匹配数组的 match[1] 元素将是一个空字符串。
  • 所以我再次删除了第二个解决方案中的 [^"] 部分 - 这个呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
相关资源
最近更新 更多