【问题标题】:Regex finding word/two words before/after specific word [duplicate]正则表达式在特定单词之前/之后查找单词/两个单词[重复]
【发布时间】:2012-10-11 05:23:33
【问题描述】:

我想在html中查找一个单词,也想获取单词前后的单词。 this 问题通过使用 (?:\S+\s)?\Stext\S(?:\s\S+)?并使用 c#。但不适用于javascript。 Javascript 好像不支持 ?:?
有什么想法吗?

例如

拥有两年历史的社交营销平台 Woobox 最近在其优惠券应用中增加了对 Apple Passbook 的支持。该集成允许企业使用其系统创建 Passbook 优惠券,甚至可以要求客户在获得优惠券之前执行某种社交活动。例如,他们可能必须在 Facebook 上“喜欢”该品牌或在 Twitter 上关注他们。但该公司还刚刚添加了另一个可以真正促进小企业采用 Passbook 的功能:通过 SMS 支持 Passbook 优惠券。

当我搜索“优惠券”时,我应该得到四个结果:“它的优惠券应用程序”、“使用存折优惠券”、“优惠券。”、“存折优惠券结束”

【问题讨论】:

  • JavaScript 确实支持 (?:...) - 你的问题到底出在哪里?
  • 请将整个问题放在这个问题中。不要让我们去另一个问题来找出你在问什么。

标签: javascript regex


【解决方案1】:

如果

(?:\S+\s)?\S*text\S*(?:\s\S+)?

在 JavaScript 中不起作用,你用错了(或者你需要定义你所说的“工作”是什么意思)。很可能您没有使用正确的语法来构造正则表达式:

var myregexp = /(?:\S+\s)?\S*text\S*(?:\s\S+)?/;

或如何在字符串中查找匹配项:

var match = myregexp.exec(subject);
if (match != null) {
    result = match[0];
} 

【讨论】:

  • 我的代码可以正常使用其他正则表达式,但使用此正则表达式无法得到错误结果。当搜索“或”但得到“世界”时
  • 我不明白你在那里写了什么。我怀疑您想使用单词边界(搜索 \bor\b 而不是 or)。
  • 我搜索'coupon',它工作正常,可以得到'优惠券'这样的结果,也可以得到'优惠券',所以我在搜索词前后添加'\b',然后只有可以得到 'coupon' ,不要包含 'coupon' 周围的字样。
  • @atu0830:这没有帮助。你写的内容不连贯且不完整。请用几个示例编辑您的问题,说明您拥有的文本、您想要匹配或不想匹配的部分、您为此使用的正则表达式以及该正则表达式没有按照您的预期执行的操作。
【解决方案2】:

JavaScript确实支持non-matching group语法(?:…)。它甚至支持lookahead,这可能对您的任务有用,只是它不支持lookbehind。

【讨论】:

  • 我应该像 '\\?:' 一样转义 '?:'
  • 不,仅当您想匹配问号和冒号时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多