【问题标题】:Select a character if some character from a list is before the character如果列表中的某个字符在该字符之前,则选择一个字符
【发布时间】:2016-01-22 00:56:52
【问题描述】:

我有这个正则表达式:

/([a-záäéěíýóôöúüůĺľŕřčšťžňď])-$\s*/gmi

这个正则表达式从我的文本中选择 č-

sme! a Želiezovce 2015: Spoloíč-
ne pre Európu. Oslávili aj 940.

但我只想选择-(没有č)(如果列表中的某些字符[a-záäéěíýóôöúüůĺľŕřčšťžňď]- 之前)。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    在其他语言中,您可以使用 lookbehind

    /(?<=[a-záäéěíýóôöúüůĺľŕřčšťžňď])-$\s*/gmi
    

    仅当 -$\s* 前面有列表中的字符之一时,它才匹配。

    然而,Javascript 没有lookbehind,所以解决方法是在正则表达式后面的部分使用捕获组。

    var match = /[a-záäéěíýóôöúüůĺľŕřčšťžňď](-$\s*)/gmi.match(string);
    

    当您使用它时,match[1] 将包含以连字符开头的字符串部分。

    【讨论】:

    • JS 没有lookbehinds。
    • @Oriol 我认为它只是没有负面的后视,我想我记错了。
    【解决方案2】:

    首先,在正则表达式中,您放在括号中的所有内容都将在匹配过程中被分解,因此匹配数组将在其0 位置包含完整的匹配字符串,然后是从左到右的所有正则表达式括号.

    /[a-záäéěíýóôöúüůĺľŕřčšťžňď](-)$\s*/gmi

    将为您返回以下匹配字符串:["č-", "-"],以便您可以从匹配中提取所需的特定数据。

    此外,$ 字符在正则表达式中表示行尾,并且您正在使用多行标志,因此从技术上讲,这部分 \s* 只是被忽略了,因为在它的结尾之后的一行中不会出现任何内容。

    正确的正则表达式应该是/[a-záäéěíýóôöúüůĺľŕřčšťžňď](-)$/gmi

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多