【问题标题】:RegExp: match with optional wrapping textRegExp:匹配可选的换行文本
【发布时间】:2015-08-20 13:35:20
【问题描述】:

考虑字符串hello/pls/friend。我可能会使用正则表达式/\w+/g 捕获这些单词,从而生成['hello', 'pls', 'friend']

现在考虑字符串(hello)/pls/friend。我现在不仅对单词感兴趣,而且对每个单词是否包含在括号内感兴趣。

我想出的一个解决方案是“复制”我的原始表达式,添加带有(转义)括号的第​​二个版本。说.../(\(\w+\))|(\w+)/g

我宁愿不复制原始表达式,所以我想知道是否有更简洁的方法来解决这个问题。

目标/要求是:

  1. 这与 String.prototype.replace() 一起使用并指定了回调,因此如果它对您有用,请记住这一点。

  2. 经过一些光照操作,应该可以生成这样的对象:

    [
      { word: "hello", wrapped: true },
      { word: "pls", wrapped: false },
      { word: "friend", wrapped: false } 
    ]
    
  3. 不匹配的括号,即(hello/pls,不应匹配。

  4. 这些是 JavaScript 正则表达式,因此请牢记这些限制

  5. 不需要处理多个换行的单词,如(hello/pls)/friend

感谢您抽出宝贵时间阅读本文,RegExp 专家!

【问题讨论】:

  • 注:/\(?\w+\)?/g 几乎等价,但不满足条件 3。

标签: javascript regex


【解决方案1】:
\(([^/)]*)\)|[^/)(]*

您可以使用它。所有匹配项将归入wrapped=False。所有捕获的组应归入wrapped = True

查看演示。

https://regex101.com/r/uF4oY4/85

【讨论】:

  • 我只花了几年时间,但我只是回顾我的问题并意识到我从未将这个问题标记为已回答。我过去的自己感谢您的帮助!
  • @jamesplease :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多