【问题标题】:Regex containg a variable [duplicate]正则表达式包含一个变量[重复]
【发布时间】:2014-04-13 08:37:41
【问题描述】:

正则表达式和变量似乎是当前的问题,但我没有找到问题的答案。

这很简单,我正在使用一个名为 nedb 的用于 javascript 的 noSQL 数据库系统。顺便说一句,很整洁。 GitHub link

这是对我们很重要的部分:

// Finding all planets whose name contain the substring 'ar' using a regular expression
db.find({ planet: /ar/ }, function (err, docs) {
  // docs contains Mars and Earth
});

如您所见,表达式 /ar/ 表示“包含子字符串 ar”,这是经典的正则表达式。 我想要的是用变量(用户搜索的结果)替换 ar。

Like this : 
var search = ‘ar'; //taken from an HTML form
db.find ({planet : ‘/‘ + search + ‘/‘}, fonction (err,docs) {
}

不幸的是,这不起作用。也没有:

  var search = ‘/ar/'; 
    db.find ({planet : search}, fonction (err,docs) {
    }

你有什么想法吗?对你来说可能看起来很明显,但我在这个问题上失去了理智啊哈! 谢谢大家

【问题讨论】:

标签: javascript regex variables


【解决方案1】:

使用 RegExp 构造函数:

db.find({ planet: new RegExp(yourString) }, function (err, docs) {

如果你的字符串可以是任何东西,你最好避开它。请参阅this related answer

【讨论】:

  • 嗨,看起来很奇怪,但这确实有效... var search = "var"; db.translation.find({translate : new RegExp(search)},function(err,docs){} 是的,没有任何 / 周围...它工作,非常感谢你,但仍然...... wtf
  • 为什么看起来很奇怪?
  • 因为没有 / ......我很困惑,但很好,不是吗
  • / 定界正则表达式文字,这是一个您不必使用 RegExp 构造函数从字符串构建的正则表达式。
  • 好的,我明白了。好吧,再次感谢你,祝你有美好的一天
【解决方案2】:

您需要使用 RegExp 构造函数,但仅此还不够(. 将是“任何字符”,? 表示前一个字符是可选的,/ 会破坏您的正则表达式,因为以及所有其他常规正则表达式关键字和字符)。

您可以通过使用正则表达式转义函数(例如preg_quote from PHPJS)来避免这种情况:

db.find({ planet: new RegExp(preg_quote(searchString, '/')) }, function (err, docs) {

【讨论】:

  • 嗨,感谢您的帮助,但 preg_quote 无法识别..
  • @user3401138:点击答案中的链接...
猜你喜欢
  • 2021-10-07
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多