Регулярное выражение для сопоставления того, что находится перед или после символа в разных ситуациях

javascript #regex

#javascript #регулярное выражение

Вопрос:

У меня возникли некоторые проблемы с написанием регулярного выражения

Чего я хочу добиться, я хочу сопоставить следующую строку 6.62 X 25.250755 L , но только то, что находится после X символа, или могут быть случаи, когда мне нужно сопоставить следующую строку 25.250755 X 6.62 , в этом случае мне нужно сопоставить то, что находится перед X символом, и последний случай — это когда у меня есть что-то вроде этого: 25.250755 L X 6.62 или 25.250755L X 6.62 (с или без пробела, с L символом или без него)

Это то, что у меня есть до сих пор, но этого недостаточно, и я не знаю, как продолжить формирование здесь

 /[Xx]([sS]*)$/gm
 

Комментарии:

1. Вам также нужно извлекать эти числа?

2. @h-sifat да, мне нужно получить это число 25.250755 или любое другое число

3. что должно соответствовать этим примерам 25.250755 L X 6.62 или 25.250755L X 6.62 есть ли в этом какая-то логика? Что, если строка является 25.250755L X 6.62L 123.45L ?

4.возможно, вы можете сопоставить последний захват повторяющейся группы захвата (?: ?(d (?:.d )) ?[XL]) regex101.com/r/I6FTsM/1 (Значение группы выделено зеленым цветом)

5. Вау, это работает, большое вам спасибо @Thefourthbird

Ответ №1:

Для ваших данных примера вы можете повторить группу с группой захвата, чтобы захватить значение последней итерации.

 (?: ?b(d (?:.d )) ?[XL]) b
 
  • (?: Не группа захвата
    • ?b Сопоставьте необязательный пробел и границу слова
    • ( Группа захвата 1
      • d (?:.d ) Сопоставьте 1 или более цифр с необязательной десятичной частью
    • ) Закрыть группу 1
    • ?[XL] Сопоставьте необязательный пробел и либо X, либо L
  • ) Закройте группу без захвата и повторите ее 1 или более раз
  • b Граница слова

Демонстрация регулярных выражений

Комментарии:

1. Большое вам спасибо за ваше время

Ответ №2:

([0-9]*[.])?[0-9] ?L? X ([0-9]*[.])?[0-9] ?L? должно работать.

Комментарии:

1. Большое вам спасибо за ваш ответ, я тестирую это, и, похоже, он останавливается на точке, так вы и предполагали? Я хотел бы получить целое число