【问题标题】:How to match with new RegExp exactly [duplicate]如何与新的 RegExp 完全匹配 [重复]
【发布时间】:2017-11-07 04:36:22
【问题描述】:

我有这个字符串:

var str = "https://www.mysite.se/this-match?ba=11"

我需要完全匹配它(在/? 之间),所以只有this-match 匹配, this-ma 或包含在this-match 中的任何东西(更短) . 即:

var myre = new RegExp('\/this-ma\?');

仍然匹配:

myre.exec(str)[0]
"/this-ma"

如何避免 this-match 中包含的较短字符串确实匹配?

【问题讨论】:

  • 如果您希望 this-match 成为唯一的匹配项,那么您为什么要提供 this-ma
  • @NeilLunn 因为有时我有类似的字符串,可能包含在this-match
  • 不,我不明白。完全匹配或相似的字符串。哪一个?不是很清楚。
  • 如果我理解正确,您正在寻找一种使用正则表达式获取this-match 的方法。如果是,您可以查看this

标签: javascript regex


【解决方案1】:

您的正则表达式的定义是错误的。您会认为 \? 将匹配文字 ? 字符,而不是非贪婪修饰符。不对。事实上恰恰相反。

var myre = new RegExp('\/this-ma\?');
> /\/this-ma?/

这里的反斜杠在字符串文字中起作用,并将单个? 输出到正则表达式,成为非贪婪修饰符。使用正则表达式文字。

var myre = /\/this-ma\?/

【讨论】:

  • 在字符串中定义模式时也可以使用双反斜杠。
  • @Sergio Tulensev 喜欢这个? var myre = new RegExp('\/this-ma\\?');
  • @user1665355:是的,如果您正在动态构建正则表达式。如果它是静态的,你应该更喜欢正则表达式文字
  • 是或new RegExp('/this-ma\\?')
  • @SergioTulentsev 谢谢!它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多