【问题标题】:regex101 Conditional statement is always elseregex101 条件语句总是 else
【发布时间】:2015-03-03 06:52:53
【问题描述】:

我正在使用http://www.regexr.com/https://regex101.com/ 来学习正则表达式

regex101 的快速参考展示

条件语句: (?(...)|)

如果给定的模式匹配,匹配竖线之前的模式。否则,匹配竖线后的模式。

我根本无法让它工作

/(^(?!no)if|else)/gm

否如果否则

是,如果否则

好像坏了

/(?:(yes)true|false)/g

是真的

我需要使用 string.match 返回一个匹配项,以便与第三方保持兼容。我没有选择自己对结果做任何事情,所以我不能做多个正则表达式,也不能用 javascript 过滤结果。我想要实现的是一个要求

的正则表达式

如果句子以单词“name”开头或句子包含“.classX”,则不返回任何内容返回“.classA

返回 [""][".classA "]

这有可能吗,还是我完全在浪费时间?

【问题讨论】:

  • 好吧,你没有遵循语法。正如你所引用的,模式是(?(test)true|false)。您要么在?(之间引入字符(例如(?:(,要么完全更改括号位置((?!no))。但是,我认为JS无论如何都不支持条件,所以没有必要走那条路。
  • 条件句的详细解释见regular-expressions.info/conditional.html
  • /((?yes)true|false)/ regex101 上的无效组结构错误
  • JavaScript 不支持正则表达式条件语句,如 Felix 所述。
  • @BenMuircroft:Fabrício 说的。但是,((?yes)true|false)仍然不正确。如果有的话,应该是(?(yes)true|false)

标签: javascript regex


【解决方案1】:

Javascript 不支持所有正则表达式功能,这就是您的条件不起作用的原因。

查看mozilla docs 了解支持功能的完整列表。

【讨论】:

    【解决方案2】:

    虽然正则表达式确实非常强大,但我建议您将条件委托给 javascript。

    因此,对于帖子末尾的示例,您只需创建一个匹配“name”或“.classX”的模式,如果match() 返回 true,则在 javascript 中返回“”。否则,返回“.classA”。

    【讨论】:

    • 我不能接受这个队友,问题是我无法用js过滤我的结果。一样的感谢
    • 对不起,直到我再读了几遍才真正明白你的意思。是什么阻止您使用 javascript 进行“过滤”?一开始你是如何使用 javascript 的?
    • 我使用 javascript 将正则表达式发送给第三方,然后他们做他们想做的事......我将不得不以另一种方式做到这一点。没关系
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多