2013-07-31 3 views
3

У меня есть эта строкаКак разбить эту строку с помощью JavaScript?

(<<b>>+<<10>>)*<<c>>-(<<x>>+<<y>>) 

Использование JavaScript, что это самый быстрый способ, чтобы разобрать это в

[b, 10, c, x, y] 
+0

Является ли структура исходной строки неизменной? – StackFlower

+0

Предлагаю прочитать о проблеме [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Было бы интересно узнать больше о реальной проблеме, которую вы пытаетесь решить здесь. Похоже, вы пытаетесь написать механизм синтаксического анализа? Возможно, если вы немного поразмышляете над этим, вы можете получить больше ответов, которые действительно полезны, а не прямое решение проблемы, которую вы поставили в вопросе в настоящее время. – Spudley

+0

Могу ли я спросить, откуда эта строка, и какова целевая цель угловых скобок? –

ответ

3
var str = '(<<b>>+<<10>>)*<<c>>-(<<x>>+<<y>>) '; 
var arr = str.match(/<<(.*?)>>/g); 
// arr will be ['<<b>>', '<<10>>', '<<c>>', '<<x>>', '<<y>>'] 

arr = arr.map(function (x) { return x.substring(2, x.length - 2); }); 
// arr will be ['b', '10', 'c', 'x', 'y'] 

Или вы можете также использовать exec, чтобы получить группы захвата непосредственно:

var regex = /<<(.*?)>>/g; 
var match; 
while ((match = regex.exec(str))) { 
    console.log(match[1]); 
} 

Это регулярное выражение имеет то преимущество, что вы можете использовать что-либо в строке, включая другие буквенно-цифровые символы, без автоматического согласования. Выполняются только те жетоны в << >>.

5

Попробуйте это:

'(<<b>>+<<10>>)*<<c>>-(<<x>>+<<y>>)'.match(/[^(<+>)*-]+/g) 
+1

Или даже 'match (/ [0-9a-z] +/g)' – Benubird

+0

как понять регулярное выражение внутри матча? Можете ли вы объяснить .. просто спрашиваете? –

+1

@MESSIAH: его соответствующие символы, которые не являются '(<+>) * -'. –

3

использование регулярных выражений

var pattern=/[a-zA-Z0-9]+/g 
your_string.match(pattern). 
Смежные вопросы