2016-12-14 4 views
-2

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

Я хочу, чтобы извлечь х и у при помощи выражений Javascript Regex.

Например, если строка

10M225S 

мне нужно 10 и 225 от этого.

Кроме того, строка может не иметь ни одной из частей x или y. Например, это может быть только 225S или просто 10M.

EDIT: Я пробовал такие вещи, как .match(), но не знаю, как извлечь значения в указанном формате.

EDIT: Регулярное выражение я пытался до сих пор /(\w+)M(\w+)S/, но это, кажется, работает только для 10M225S и не 10M и 225S.

+2

Вы пробовали что-нибудь? где вы застряли? – Cruiser

+2

Что вы пробовали? Были ли Google регулярные выражения javascript? – slim

+0

Да ... Я об этом говорил. Найден о .match(), но, похоже, не получается. – dsaket

ответ

0

Вы можете сделать что-то вроде этого:

var str = "10M255S" 
var match = str.match(/^([0-9]*)M*([0-9]*)S*$/) 

Тогда match[1] является 10 и match[2] является 255

Если var str = "10M", то match[1] является 10 и если var str = "255S", то match[1] является 255

В любой из трех случаев, соответствует началу f rom второй элемент массива match.

Надеюсь, это поможет. Ответ

+0

Но он дает тот же результат для '10M' и' 10S'. Как бы я отличился? – dsaket

+0

Правда, да. В соответствии с вопросом вы сказали, что хотите извлечь 'x' и/или' y', которые связаны с 'M' и' S' соответственно. Если вы укажете одинаковые значения x и y в строке, почему вы хотите различать их (как и те, и другие)? – Terminater

+0

И если вы действительно хотите различать tose two, используйте первый элемент в массиве 'match', который дает целую строку со строкой. – Terminater

1

вы можете использовать .split() для разделения строк:

var str = "10M225S" 
 
var m = str.split("M")[0]; 
 
var s = str.split("M")[1].split("S")[0]; 
 

 
console.log("m >>> " + m); 
 
console.log("s >>> " + s);

нет необходимости регулярных выражений в этом случае.

+0

Спасибо за альтернативу. Но мне нужен подход с регулярным выражением. – dsaket

+0

@dsaket Почему? Потому что это домашнее задание?Если это так, то, вероятно, ваш преподаватель дал вам необходимую вам документацию. – slim

+0

Нет .. это ситуация, с которой я столкнулся, когда работал над приложением. – dsaket

0

K-Gun имеет смысл, если картина никогда не меняется, однако, если 'M' и 'S' просто заполнителя примеры для произвольного текста, а затем использовать RegExp/\ d +/г

<!DOCTYPE html> 
<html> 
<head> 
    <script> 
    function fn() { 
     var re = /\d+/g, // match digits, globally 
     str = '10M225S', 
     result = [], 
     temp; 
     // process successive matches 
     while ((temp = re.exec(str)) !== null) 
     result.push(temp[0]); 

     document.getElementById("result").innerText = result.toString(); 
    } 
    </script> 
</head> 
<body onload="fn()"> 
    <h1 id="result"></h1> 
</body> 
</html> 

Это plunkr, демонстрирующий код.

RegExp re будет соответствовать прогонам цифр. Это будет работать независимо от любых цифр, отличных от цифр. он будет соответствовать «10ZXZZ225FOZ».

+0

дает тот же результат для 10M и 10S. т. е. 10. Как я могу отличить? – dsaket

+0

@dsaket посмотреть на plunkr, с которым я связан, потому что это неверно. – RamblinRose

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