正则表达式,否则解释

时间:2015-08-25 19:35:25

标签: javascript regex if-statement

我正在整理一些旧文档并试图在其中做出一些顺序,可能会将它们放在更易读的格式中,所以我正在编写一些脚本来修复它们。

因为我只知道基本的正则表达式,所以我认为这是学习更多知识的好机会,但我有点卡住了。

以下是我的数据样本:

Adapter za uređaje sa navojem M52x0.75 (Dedal, Jahnke) - 34 mm
Prednja baza za nosač skidajući (Švenk) - Antonio Zoli: 1900
Prednja baza za nosač skidajući (Švenk) - CZ 550, 557, 537, ZKK, 600, 601, 602 (19 mm prism)
Redukcijski prsten za Dedal monokular M-54X - 44 mm
Prsteni - prizma 11 - 25.4 mm, matica, H12
Prsteni - prizma 16,5 - 25.4 (26) mm, matica, H14
Stražnja nožica za nosač skidajući (Švenk), H10.3
Prednja nožica za nosač skidajući (Švenk), H10, KR10
Nosač s etažom - prizma 16,5 (CZ 527) - 30 mm, ručica, H15
Nastavak za čišćenje (mesing) M4 - kalibar .22

以下是我希望将其组合在一起(用[]标记的组:

[Adapter za uređaje sa navojem M52x0.75 (Dedal, Jahnke)] - [34 mm]
[Prednja baza za nosač skidajući (Švenk)] - [Antonio Zoli: 1900]
[Prednja baza za nosač skidajući (Švenk)] - [CZ 550, 557, 537, ZKK, 600, 601, 602 (19 mm prism)]
[Redukcijski prsten za Dedal monokular M-54X] - [44 mm]
[Prsteni - prizma 11 - 25.4 mm, matica], [H12]
[Prsteni - prizma 16,5 - 25.4 (26) mm, matica], [H14]
[Stražnja nožica za nosač skidajući (Švenk)], [H10.3]
[Prednja nožica za nosač skidajući (Švenk), H10], [KR10]
[Nosač s etažom - prizma 16,5 (CZ 527) - 30 mm, ručica], [H15]
[Nastavak za čišćenje (mesing) M4] - [kalibar .22]

基本上,我设想的规则如下:

  1. 如果字符串以H(num)KR(num)结尾,则选择一个组中的(H|KR)(num)和另一组中的(H|KR)(num)
  2. ,否则

    1. 选择第一组-,中的所有内容,第二组后的所有内容(与-匹配优先于,
    2. 这是我的1和2的正则表达式:

      1. (.+), ((?:H|KR)[0-9\.]+)$
      2. (.*)(?: -) (.*)|(.*)(?:,) *(.*)
      3. 现在我只需要测试(?:H|KR)[0-9\.]+$是否匹配,然后相应地选择12,但我不知道如何。

        我发现可以使用(?(?=regex)then|else)完成,但是当我合并我的解决方案时,它不起作用。这是:

        (?(?=(?:H|KR)[0-9\.]+$)(.+), ((?:H|KR)[0-9\.]+)$|(?:(.*)(?: -) (.*)|(.*)(?:,) *(.*)))
        

        我可以在脚本中进行测试,但我想我会用正则表达式尝试一下。如果有人能找到它,我也会感谢我的解决方案更优雅:D

        谢谢!

        [编辑]

        我忘了添加两个关键测试用例,这里是:

        Stražnja nožica za nosač skidajući (Švenk), H8.3
        Prednja nožica MAGNUM za nosač skidajući (Švenk), H12, KR38
        

        应该返回

        [Stražnja nožica za nosač skidajući (Švenk)], [H8.3]
        [Prednja nožica MAGNUM za nosač skidajući (Švenk), H12], [KR38]
        

1 个答案:

答案 0 :(得分:0)

尝试这种模式

(.*),\s*((?:H|KR)\d+(?:\.\d+)?$)|(.*)- ([^-]+$)

并替换为[$1$3], [$2$4]
Demo