Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите составить регулярное выражение (https://javascript.ru/forum/misc/14205-pomogite-sostavit-regulyarnoe-vyrazhenie.html)

MCTrane 05.01.2011 14:48

Помогите составить регулярное выражение
 
Мне нужно выражние которое в строке:
JOOMtest1*test2JOOM
Уберёт *test2
На php для preg_replace я написал:
Код:

"/(?<=JOOMtest1)([А-Яа-яA-Za-z0-9\D]+?)(?=JOOM)/"
На JavaScript не получается(
Кто знает, помогите пожалуйста.

Aetae 05.01.2011 16:42

alert('JOOMtest1*test2JOOM'.replace(/\*.+?JOOM/g,'JOOM'))

Но вообще не понятно насколько свободной может быть строчка, приведите пару примеров, если вышенаписанное не подойдёт.

MCTrane 05.01.2011 17:01

Спасибо, вроде подходит)

ksa 05.01.2011 18:08

Aetae, а чего не так?

alert('JOOMtest1*test2JOOM'.replace(/\*test2/g,''))

Aetae 05.01.2011 18:11

Потому и написал - что хз какая строка.
Мож там у него JOOMblablabla*parampampamJOOM.(что косвенно подтверждается приведённым им regexp'oм)
Потому и флаг g кстати.

ksa 05.01.2011 18:14

Цитата:

Сообщение от Aetae
хз какая строка

Вроде ясно все написано... :)
Цитата:

Сообщение от MCTrane
Мне нужно выражние которое в строке:
JOOMtest1*test2JOOM
Уберёт *test2

А у тебя все от * до JOOM просто заменится на JOOM, я правильно понял?

Aetae 05.01.2011 18:16

Цитата:

Сообщение от ksa (Сообщение 86381)
А у тебя все от * до JOOM просто заменится на JOOM, я правильно понял?

Да.

MCTrane 05.01.2011 23:29

А как использовать в выражении переменную?
т.е. вот выражние
/\*.+?\JOOM/g
Но у меня "JOOM" переменчив, как мне такое осуществить?

exec 06.01.2011 06:22

var text = "JOOM или что-то другое";
alert('JOOMtest1*test2JOOM'.replace(new RegExp("\\*.+?" + text, "g"), text))

MCTrane 06.01.2011 12:45

Не работает..
Вот например такой случай:
<script language="JavaScript" type="text/javascript">
var text = "JOOMtest1*";
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(new RegExp("\\*.+?" + text, "g"), text));
</script>

Должно вывестись JOOMtest1JOOMtest3%test4JOOM, а выводит JOOMtest1JOOMtest1*3%test4JOOM
P.S. Блин, как сделать чтобы можно было запустить код?

Aetae 06.01.2011 13:23

Цитата:

Сообщение от MCTrane (Сообщение 86471)
Не работает..
Вот например такой случай:
<script language="JavaScript" type="text/javascript">
var text = "JOOMtest1*";
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(new RegExp("\\*.+?" + text, "g"), text));
</script>

Должно вывестись JOOMtest1JOOMtest3%test4JOOM, а выводит JOOMtest1JOOMtest1*3%test4JOOM

Во-первых:
var text = "JOOM";

Во вторых:
* и % - разные вещи.

Если надо и то и то:
var text = "JOOM";
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(new RegExp("[*%].+?" + text, "g"), text));

Потому я и спрашивал в начале о вариантах строк.

Цитата:

Сообщение от MCTrane (Сообщение 86471)
P.S. Блин, как сделать чтобы можно было запустить код?

[JS run]/[HTML run]

ksa 06.01.2011 13:26

Цитата:

Сообщение от MCTrane
Должно вывестись JOOMtest1JOOMtest3%test4JOOM

Так вот...
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(/\*test2/g,''))

MCTrane 06.01.2011 13:27

Тоже не работает,
var text = "JOOM";
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(new RegExp("[*%].+?" + text, "g"), text));

Выводит JOOMtest1JOOMtest3JOOM
А надо : JOOMtest1JOOMtest3%test4JOOM

MCTrane 06.01.2011 13:28

Цитата:

Сообщение от ksa (Сообщение 86476)
Так вот...
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(/\*test2/g,''))

Сейчас попробую

MCTrane 06.01.2011 13:31

Цитата:

Сообщение от ksa (Сообщение 86476)
Так вот...
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(/\*test2/g,''))

var text = "\*test2";
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(new RegExp("/" + text, "g"), ''));

Работает, большое спасибо, но я "test2" не знаю, там может быть всё что угодно.. Если б знал то воспользовался str_replace и не мучался...
Как можно сделать, если я знаю только test1

ksa 06.01.2011 13:34

MCTrane, ты меня убиваешь... :D Ты можешь сформулировать задачу?

Aetae 06.01.2011 13:41

Думай головой. Самый первый вариант рабочий.

MCTrane 06.01.2011 13:51

Цитата:

Сообщение от Aetae (Сообщение 86486)
Думай головой. Самый первый вариант рабочий.

Нет, а если тот элемент который нужно вырезать, последний или в середине?

ksa 06.01.2011 13:55

MCTrane, теперь-то оно? :D

var text = "*test2";
text=new RegExp('\\'+text, "g")
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(text, ''));

MCTrane 06.01.2011 13:57

Цитата:

Сообщение от ksa (Сообщение 86483)
MCTrane, ты меня убиваешь... :D Ты можешь сформулировать задачу?

У меня есть например строка:
JOOMtest1*test2JOOMtest3%test4JOOMtest5%test6JOOM
Я знаю только что нужно вырезать тот участок строки где есть например test1, а на участки делит "JOOM", можно конечно делать explode(), но это слишком много, и я решил через регулярные выражения.
Также я хотел сделать через AJAX, но потом подумал что в JS тоже есть рег. выражения. Но с ними сложнее...
Т.е. шаблон выреза что-то типа такого:
JOOMtest1*[то_что_я_не_знаю]JOOM
Причём "то_что_я_не_знаю" я не знаю.
Цитата:

Сообщение от ksa (Сообщение 86488)
MCTrane, теперь-то оно? :D

var text = "*test2";
text=new RegExp('\\'+text, "g")
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(text, ''));

Я же говорю test2 я не знаю, я знаю только test1 или test3, а test2 и test4 не знаю

ksa 06.01.2011 14:04

MCTrane, так тебе нужно убрать что-то от * (звезды) до JOOM? Или опять не то?

MCTrane 06.01.2011 14:05

Цитата:

Сообщение от ksa (Сообщение 86492)
MCTrane, так тебе нужно убрать что-то от * (звезды) до JOOM? Или опять не то?

Да, с учётом того что я знаю то что до звезды.

ksa 06.01.2011 14:07

MCTrane, тогда продолжай думать над формулировкой задачи... :D

MCTrane 06.01.2011 14:08

ksa, Ну ты же всё понял...

ksa 06.01.2011 14:12

MCTrane, дело не в том что понял я... Дело в том, что таки нужно тебе. ;)

MCTrane 06.01.2011 14:22

Ну мне надо так:
Есть строка
JOOMtest1*test2JOOMtest3*test4JOOMtest5*test6JOOM
В функцию поступил аргумент "test1", и эта функция должна вырезать тот участок строки где есть "test1", т.е. должно получиться после вызова такой функции так:
JOOMtest3*test4JOOMtest5*test6JOOM
Ещё один пример:
Строка:
JOOMtest1*test2JOOMtest3*test4JOOMtest1*test2JOOMt est5*test6JOOM
Аргумент: test1
Должно получиться: JOOMtest3*test4JOOMtest5*test6JOOM

ksa 06.01.2011 14:31

Цитата:

Сообщение от Aetae
Самый первый вариант рабочий.

Таки он прав. :)

<!DOCTYPE html>
<html>
<head>
<title></title>
<script> 
function Go(Str) {
	var beg = 'JOOM'+Str
	var end = "JOOM";
	var test=new RegExp(beg+'.+?'+end, "g")
	alert('JOOMtest1*test2JOOMtest3*test4JOOMtest1*test2JOOMt est5*test6JOOM'.replace(test,end))
}
</script> 
</head>
<body onload='Go("test1")'>
</body>
</html>

MCTrane 06.01.2011 14:35

ksa,Aetae Огромное спасибо за помощь.

x-yuri 06.01.2011 21:59

MCTrane, а можешь рассказать, что это за строка и что ты вообще делаешь?

Aetae 07.01.2011 00:57

Цитата:

Сообщение от x-yuri (Сообщение 86541)
MCTrane, а можешь рассказать, что это за строка и что ты вообще делаешь?

Это было бы не интересно, ибо гарантированно он делает что-то через тоннель, а в таком случае пришлось бы его сразу посылать rtfm и не маяться фигнёй.)

MCTrane 07.01.2011 09:35

В этой строке просто формулы прописаны, и их надо как-то удалять при удалении элемента

x-yuri 07.01.2011 16:48

Цитата:

Сообщение от Aetae
Это было бы не интересно, ибо гарантированно он делает что-то через тоннель, а в таком случае пришлось бы его сразу посылать rtfm и не маяться фигнёй.)

:lol: ну да, наивно полагать, что кто-то приходит сюда, чтобы помогать людям... но я все же предпочитаю решать реальные задачи, а не надуманные ;)

MCTrane, а почему не хранить формулы в объекте (ассоциативном массиве)?
var formulas = {
    'test1': '<формула>',
    ...
};
delete formulas['test1'];

MCTrane 10.01.2011 00:01

Цитата:

MCTrane, а почему не хранить формулы в объекте (ассоциативном массиве)?
Потому что формула нужна в разных функциях.

Ещё вопрос есть.
Мне ещё надо рег. выражение которое было обратно то которое сделали, т.е. "неизвестное" будет перед "*".
Я пытался делать так:
var text = "test3";
var z2 = "JOOMtest1*test3JOOMtest2*test4JOOM";
	var beg2 = 'JOOM';
    var end2 = text+"JOOM";
var end = "JOOM";
	test2=new RegExp(beg2+'+?.'+end2, "g")
	alert(z2.replace(test2,end))

Что-то не работает... Подскажите пожалуйста, что не так?

x-yuri 10.01.2011 00:05

Цитата:

Сообщение от MCTrane
Потому что формула нужна в разных функциях.

и? Если ты хочешь, чтобы решили твою сферическую проблему в вакууме - жди ответа Aetae. Иначе расскажи подробно, что ты делаешь...

Aetae 10.01.2011 00:14

Не, Aetae дважды в одной теме ленивым халявщикам не отвечает.)

MCTrane 10.01.2011 14:27

x-yuri,
Есть строка
JOOMtest2*test1JOOMtest3*test4JOOMtest5*test6JOOM
В функцию поступил аргумент "test1", и эта функция должна вырезать тот участок строки где есть "test1", т.е. должно получиться после вызова такой функции так:
JOOMtest3*test4JOOMtest5*test6JOOM
Ещё один пример:
Строка:
JOOMtest2*test1JOOMtest3*test4JOOMtest1*test2JOOMt est5*test6JOOM
Аргумент: test1
Должно получиться: JOOMtest3*test4JOOMtest5*test6JOOM

Выше представленный код почему-то не работает.(

x-yuri 10.01.2011 15:59

что в этих строках храниться? Для чего они нужны? Кто придумал такой формат? Начни ответ так: я делаю сайт, на котором...

MCTrane 10.01.2011 16:28

x-yuri,
Придумал формат я. Я просто пытаюсь разобраться в регулярных выражениях в js, в php разобрался, сначала вообще хотел через аякс делать, но узнал что в js тоже есть рег. выражения, только вот литературы по ним нормальной нет, на всех сайтах одно и тоже.
В строке хранятся формулы. И мне надо их удалить зная только 1 элемент формулы.

monolithed 10.01.2011 16:55

Цитата:

Сообщение от x-yuri
Если ты хочешь, чтобы решили твою сферическую проблему в вакууме - жди ответа Aetae.

ага, Aetae это он хорошо умеет)))))
Цитата:

Сообщение от MCTrane
Придумал формат я

а спецификации еще нет?
Цитата:

Сообщение от MCTrane
сначала вообще хотел через аякс делать, но узнал что в js тоже есть рег. выражения

вы в своем уме Ajax == JavaScript

MCTrane 10.01.2011 17:02

monolithed,
"вы в своем уме Ajax == JavaScript"
Ну я имею ввиду делать запрос к php.
monolithed,
"а спецификации еще нет?"
Не знаю.

Блин, обьясните пожалуйста почему рег. выражение beg2+'+?.'+end2 не работает? Если я правильно понимаю то "+?" обозначает неизвестные символы, это ".", любой символ. И получается JOOM[неизвестные_символы](любой_символ)test3JOOM


Часовой пояс GMT +3, время: 05:27.