Как добавить два дефиса в выражение RegEx?

У меня есть значение, которое я хочу добавить два дефиса.

Например, если я получаю:

ФН322КН

Я хочу преобразовать его в:

ФН-322-КН

Я пытаюсь использовать это решение (Значение переменной javascript маски), и я застрял здесь:

КОД:

значение переменной = 'FN322KN';

var formatted = value.replace(/^(.{2})(.{5}).*/, '$1-$2');

РЕЗУЛЬТАТ КО:

«ФН-322КН»

Может кто-нибудь, пожалуйста, скажите мне, как я могу добавить второй "-"?

ОБНОВЛЯТЬ!!

Ответы Mark Baijens и Buttered_Toast верны. У меня есть еще один вопрос. Что, если значение будет выглядеть как FN-322KN или F-N322-KN? Типа, не в формате? Потому что если это так, то он добавляет один хифен туда, где он уже существует, делая его «--».

Спасибо!

Есть ли какая-то логика для сопоставления этой строки FN322KN Как символы A-Z и цифры?

The fourth bird 07.02.2023 12:20

Вы всегда хотите дефисы после первых 2 символов и после первых 5 символов?

John Williams 07.02.2023 12:21

Кажется, что ОП хочет дефис всякий раз, когда за символом от A до Z следует цифра... /[A-Z](?=\d)/g... и всякий раз, когда за цифрой следует символ от A до Z... /\d(?=[A-Z])/g... что приводит к любое из следующих решений ... 'FN322KN'.replace(/[A-Z](?=\d)/g, '$&-').replace(/\d(?=[A-Z])/g, '$&-'); ... 'FN322KN'.replace(/[A-Z](?=\d)|\d(?=[A-Z])/g, '$&-');

Peter Seliger 07.02.2023 12:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
96
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Предполагая, что вам всегда нужны дефисы после первых 2 символов, а после первых 5 символов вы можете легко изменить регулярное выражение на 3 группы.

var value = 'FN322KN';
var formatted = value.replace(/^(.{2})(.{3})(.{2}).*/, '$1-$2-$3');
console.info(formatted);

Исходя из предоставленного контента, вы можете попробовать это

(?=(.{5}|.{2})$)

https://regex101.com/r/JZVivU/1

const regex = /(?=(.{5}|.{2})$)/gm;

// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?=(.{5}|.{2})$)', 'gm')

const str = `FN322KN`;
const subst = `-`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.info('Substitution result: ', result);

Другие вопросы по теме