【问题标题】:Javascript regex with negative lookbehind (review)带有负面后视的 Javascript 正则表达式(评论)
【发布时间】:2016-03-18 03:01:03
【问题描述】:

我希望有人可以检查我的正则表达式,以确保它正在做我希望它做的事情。

这就是我所追求的:

  1. 在单词边界内搜索单词 - 因此它可以是单独的单词,也可以是另一个单词中的单词
  2. 获取前面的 30 个字符(如果存在前面的字符),但前提是它们包含我要搜索的单词。
  3. 获取接下来的 30 个字符(如果存在)

所以如果我搜索“汽车”作为 1,我有:

(\b\w*car\w*\b)

对于 2,我有:

((?!\b\w*car\w*\b).{30}|.{0,30})

对于 3,我有:

.{0,30}

大家一起:

((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b).{0,30}

我做对了吗,这会做我所追求的吗?

【问题讨论】:

  • 这个codereview.stackexchange.com 可能是这个问题的更好的地方
  • 您能否为这个表达式添加一些有效和无效字符串的示例?
  • 在控制台中运行它并检查输出是否是您想要/期望的:"I'm an psychodelic purple and green electric smartcar that goes insanely really fast and can lap the Earth on a single charge".match(/((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b)(.{0,30})/)
  • 我做对了吗,这会做我想要的吗?我不知道,是吗?
  • 差不多,需要稍作改动

标签: javascript regex


【解决方案1】:

您的正则表达式需要稍作更改。

最后一个.{0, 30} 需要放入一个组。完整的正则表达式就变成了这样:

/((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b)(.{0,30})/

如果你在 javascript 控制台中运行它,你可以看到输出:

var str = "I'm an psychodelic purple and green electric smartcar that goes insanely really fast and can lap the Earth on a single charge"
var match = str.match(/((?!\b\w*car\w*\b).{30}|.{0,30})(\b\w*car\w*\b)(.{0,30})/);

alert(
  "Word containing car: " + match[2] +
  "\nFirst 30: " + match[1] +
  "\nLast 30: " + match[3]
);

您应该收到以下警报消息:

Word containing car: smartcar
First 30: lic purple and green electric 
Last 30:  that goes insanely really fas

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 2016-09-04
    • 2016-05-10
    • 2017-01-29
    • 1970-01-01
    • 2022-01-12
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多