Regex заменяет все символы кроме последних 5 символов и пробелов со знаком плюс - PullRequest
3 голосов
/ 03 ноября 2019

Я хотел заменить все символы, кроме последних 5 символов и пробела, на +

var str = "HFGR56 GGKDJ JGGHG JGJGIR"
var returnstr = str.replace(/\d+(?=\d{4})/, '+');

результат должен быть "++++++ ++++ +++++ JGJGIR"но в приведенном выше коде я не знаю, как исключить пробелы

Ответы [ 4 ]

3 голосов
/ 03 ноября 2019

Вам необходимо сопоставлять каждый символ отдельно, и вам нужно разрешить сопоставление, только если за ним следуют более шести символов этого типа.

Я предполагаю, что вы хотите заменить буквенно-цифровые символы. Они могут быть сопоставлены с \w. Все остальные символы будут соответствовать \W.

Это дает нам:

returnstr = str.replace(/\w(?=(?:\W*\w){6})/g, "+");

Проверьте это в прямом эфире на regex101.com .

2 голосов
/ 03 ноября 2019

Другой способ - заменить группу в то время, когда количество замененных +
зависит от длины совпадающих символов:

var target = "HFGR56 GGKDJ JGGHG JGJGIR";

var target = target.replace(
        /(\S+)(?!$|\S)/g, 
        function( m, g1 )
        {
          var len = parseInt( g1.length ) + 1;
          //return "+".repeat( len );     // Non-IE (quick)
          return Array( len ).join("+");  // IE (slow)
        } );
        
console.log ( target );        
2 голосов
/ 03 ноября 2019

Шаблон \d+(?=\d{4}) не совпадает в строке примера, так как соответствует 1+ цифрам, утверждая, что справа - 4 цифры.

Другой вариант - сопоставлять пробел и 5+ символов слова доконец строки или совпадение с одним словом в группе 1 с использованием чередования .

При обратном вызове replace верните +, если у вас естьсопоставленная группа 1, в противном случае возвращает совпадение.

\w{5,}$|(\w)

Regex demo

let pattern = / \w{5,}$|(\w)/g;
let str = "HFGR56 GGKDJ JGGHG JGJGIR"
  .replace(pattern, (m, g1) => g1 ? '+' : m);
console.log(str);
0 голосов
/ 03 ноября 2019

Вы можете использовать отрицательный прогноз с привязкой конца строки.

\w(?!\w{0,5}$)

Соответствует любому символу слова, за которым не следует 0 to 5 символов и конца строки.

var str = "HFGR56 GGKDJ JGGHG JGJGIR"
var returnstr = str.replace(/\w(?!\w{0,5}$)/g, '+');

console.log(returnstr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...