Используя регулярное выражение, можем ли мы взять четное и нечетное значение?

1
var testSt = "Hello"
testSt.split('').filter((a,b)=>{if(b==0||b%2==0){return a}}).join('') // to get even placed value Hlo

Это можно сделать, пройдя через значения и проверить, делится ли индекс на 2 или нет. Можно ли напрямую писать регулярное выражение и exec в строке, чтобы получить помещенные и нечетные значения?

Example - testSt.exec(/^\d*[024]$/) //something like this
  • 2
    Nitpick: 0%2==0 поэтому b==0|| избыточно
Теги:

1 ответ

7
Лучший ответ

Что-то вроде этого?

console.log('abcdefghij'.replace(/(.)./g, '$1'));

. в RegExp будет соответствовать что угодно, так что /../ - способ сопоставить пару символов. Использование g модификатора приведет к совпадению всех пар символов в строке. Такое совпадение выполняется без совпадения совпадений, поэтому ab, cd, ef, gh и ij.

Положив () вокруг первого . он образует группу захвата по первому символу каждой пары. $1 - специальный синтаксис, используемый для обозначения первой группы захвата, поэтому каждая пара будет заменена первым символом этой пары.

Так, например, первая совпадающая пара в строке - это ab и a будет захвачена. Следовательно, ab будет заменено на a. Затем он заменит cd на c, ef на e и так далее.

Стоит отметить, что для строки с нечетной длиной окончательный символ не будет сопоставляться, но это не проблема, потому что мы не хотим его заменять. Это было бы проблемой, если бы мы захотели поменять роли нечетных цифр и даже цифр, чтобы мы не могли просто перемещать круглые скобки. Чтобы получить это, нам нужно сделать второй символ необязательным в конце строки. Мы можем сделать это, используя символ $, который соответствует концу строки:

// This leaves a trailing letter i at the end, which is wrong
console.log('abcdefghi'.replace(/.(.)/g, '$1'));

// Fixed
console.log('abcdefghi'.replace(/.(.|$)/g, '$1'));
  • 0
    Спасибо @Skirtle, вы можете дать небольшое объяснение ответа
  • 0
    @VinodkumarG Готово.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню