【问题标题】:Match part of string not proceeded by a space匹配不以空格开头的部分字符串
【发布时间】:2016-12-20 04:58:03
【问题描述】:

我如何才能匹配子字符串只有在它没有以空格开头?

在下面的字符串中,我只想匹配第一行和第三行,而不是第二行。在这种情况下,该行还需要以 # 开头

#match
 #not match
#match

https://regex101.com/r/VE3Q8z/1

负前瞻(?! ) 似乎没有任何影响。也许我正在寻找的是消极的后视,但我还没有找到任何关于如何在 Javascript 中这样做的示例(对我来说有意义)。

【问题讨论】:

  • 也许你需要^#(.*)?
  • 你需要一些锚点:regex101.com/r/VE3Q8z/2
  • @WiktorStribiżew 更新了问题。我还需要能够匹配以下以 # 开头的行,而不仅仅是第一行。
  • 所以,我的建议就是你所需要的。见regex101.com/r/zE53Cs/2

标签: javascript regex


【解决方案1】:

你可以用锚来实现它:

^(?! )(#+)(.*)

查看上述链接到您自己的演示:https://regex101.com/r/VE3Q8z/2

【讨论】:

  • 这实际上没有意义,# 不是空格,(?! ) 将始终返回 true。 ^(?! )(#+)(.*) 模式等于 ^(#+)(.*) -> 所以,使用我的建议 - /^#(.*)/gm
  • 太棒了!你知道为什么没有锚就不行吗?
  • 哦,我想我明白了。我一直认为^ 仅表示字符串的开头,但看起来它表示行的开头。
  • @spencer.sm:开启多行修饰符表示行首(regex101.com模拟器中m)
  • @WiktorStribiżew 你的简化很有意义^#(.*)。我可能会在我的项目中使用它。感谢您的帮助!
【解决方案2】:

只需使用anchor 来验证字符串是否以“#”开头。然后在其中添加“全局”和“多行”标志

/^#+(.*)/gm

https://regex101.com/r/koOXUB/1

【讨论】:

  • @spencer.sm 我实际上是在那之前 1 分钟;)
【解决方案3】:

这是你的正则表达式:

^#(.*)

这部分^#匹配所有以#开头的字符串。您可以修改最后一部分以仅匹配字符或数字..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多