2017-01-06 8 views
1

У меня есть строка в следующем формате:Извлечение строки с использованием регулярных выражений в JavaScript

"hello(%npm%)hi" 

Моя цель состоит разбить строку на три части

a) hello 
b) (%npm%) 
c) hi 

Я использую регулярное выражение следующим образом:

var myString = "hello(%npm%)hi".match(/[a-z]*/); 
     var backdtring = "hello(%npm%)hi".match(/\)[a-z]*/); 
     var midstring = "hello(%npm%)hi".match(/\(\%[a-z]*\%\)/); 

var res = backdtring.replace(")", ""); 

https://jsfiddle.net/1988/ff6aupmL/

Я пытаюсь в jsfiddle, где Theres ошибка в строке:

var res = backdtring.replace(")", ""); 

"backdtring.replace не является функцией".

Что не так в функции замены выше?

Обновление: Кроме того, я использовал лучшие практики регулярных выражений?

+4

'.match' of regex возвращает массив совпадений. '.replace()' не может применяться к массивам. 'console.log (backdtring)' мог бы это показать. – 31piy

+1

https://jsfiddle.net/satpalsingh/uj6rqjhf/ – Satpal

+2

['str.match (/ \ w +/g)'] (https://jsfiddle.net/tusharj/ff6aupmL/1/) – Tushar

ответ

2

Как уже было упомянуто в комментариях, вы пытаетесь использовать метод String#replace на массиве, смотрите описание возвращаемого значения String#match:

Array, содержащее весь результат матча и любой скопированные совпадающие результаты; null, если совпадений не было.

Для упрощения лексемизации, я предпочел бы использовать .split(/(\([^()]*\))/), чтобы получить все подстроки в скобках и подстроки, которые остаются:

var s = "hello(%npm%)hi"; 
 
var res = s.split(/(\([^()]*\))/); 
 
console.log(res);

Деталь:

  • (\([^()]*\)) - образец прилагается захватывая группы, с тем split может вернуться как подстроки, которые соответствуют и те, которые не соответствуют шаблону
  • \( -a буквального (
  • [^()]* - 0+ символы, кроме ( и )
  • \) - буква ).

 Смежные вопросы

  • Нет связанных вопросов^_^