2013-05-29 2 views
3

У меня есть следующая строка:Как я могу разделить эту строку легко

"<--something--><++something++><**something**>" 

Строка может иметь произвольное число «нечто», даже только один раз.

мне нужно разделить его следующим образом:

["<--something-->", "<++something++>", ...] 

Но я не знаю, как поступить лучше.

Я хотел бы сделать что-то вроде string.split("><"), но тогда я бы:

["<--something--", "++something++", ...] 

И с string.split(/(><)/) я получаю:

["<--something--", "><", "++something++", "><", ...] 

Я могу думать о нескольких менее чем оптимальные решения , но я хочу очень изящный.

+3

Не разделить, соответствовать! –

+0

@ Джэк, это звучит как хорошее предложение. – MarioDS

+0

Если вы хотите получить внутреннее содержимое (материал внутри '') - http://jsfiddle.net/5qwNV/ – Ian

ответ

3
var s = '<--something--><++something++><**something**>', 
    p = s.match(/(<[^>]+>)/g); 
console.log(p); // ["<--something-->", "<++something++>", "<**something**>"] 

Это только при условии, что каждый «токен» никогда не будет иметь >. Таким образом, она не будет выполнена следующим:

<--some>thing--><++something++><**something**> 
    ^problematic 

Я хотел бы подчеркнуть, что если вы используете это для разбора HTML, Стоять. Regex - неправильное решение, если вы хотите захватить определенные элементы из HTML. вместо этого разместите контент в скрытом <div> (или что-то еще) и используйте собственные средства доступа к DOM.

4

Вы не разделяете строку, вы соответствуете ей.

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

string.match(/<(.)\1[^>]+?\1\1>/g) 

Это будет соответствовать <, два из вида, а затем найти и тот же два вида и > в конце.

2

Это выражение должно сделать это:

"<--something--><++something++><**something**>".match(/<([+*-])\1.*?\1\1>/g) 

Это соответствует угол открытия кронштейн, за которым следуют два одинаковых символов (из набора +, - и *, но вы могли бы просто использовать ., чтобы соответствовать любому; она заканчивается теми же двумя символами и угловой скобкой

-1

решение:.

var a = "<--something--><++something++><**something**>"; 
a.match(/\<(\-|\+|\*)+something(\-|\+|\*)+\>/g); 

результат:

["<--something-->", "<++something++>", "<**something**>"] 
+0

Нет , вы создаете группы соответствий. Это не будет делать то, что я хочу. Кроме того, я не имел в виду «что-то» быть буквальным. – MarioDS

+0

Вы не сказали, что вам не нужны соответствующие группы, и то, что вы можете заменить ([\ w]) + –

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