Помогите составить регулярное выражение
Мне нужно выражние которое в строке:
JOOMtest1*test2JOOM Уберёт *test2 На php для preg_replace я написал: Код:
"/(?<=JOOMtest1)([А-Яа-яA-Za-z0-9\D]+?)(?=JOOM)/"Кто знает, помогите пожалуйста. |
alert('JOOMtest1*test2JOOM'.replace(/\*.+?JOOM/g,'JOOM'))
Но вообще не понятно насколько свободной может быть строчка, приведите пару примеров, если вышенаписанное не подойдёт. |
Спасибо, вроде подходит)
|
Aetae, а чего не так?
alert('JOOMtest1*test2JOOM'.replace(/\*test2/g,''))
|
Потому и написал - что хз какая строка.
Мож там у него JOOMblablabla*parampampamJOOM.(что косвенно подтверждается приведённым им regexp'oм) Потому и флаг g кстати. |
Цитата:
Цитата:
|
Цитата:
|
А как использовать в выражении переменную?
т.е. вот выражние /\*.+?\JOOM/g Но у меня "JOOM" переменчив, как мне такое осуществить? |
var text = "JOOM или что-то другое";
alert('JOOMtest1*test2JOOM'.replace(new RegExp("\\*.+?" + text, "g"), text))
|
Не работает..
Вот например такой случай:
<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. Блин, как сделать чтобы можно было запустить код? |
Цитата:
var text = "JOOM"; Во вторых: * и % - разные вещи. Если надо и то и то:
var text = "JOOM";
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(new RegExp("[*%].+?" + text, "g"), text));
Потому я и спрашивал в начале о вариантах строк. Цитата:
|
Цитата:
alert('JOOMtest1*test2JOOMtest3%test4JOOM'.replace(/\*test2/g,''))
|
Тоже не работает,
var text = "JOOM";
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(new RegExp("[*%].+?" + text, "g"), text));
Выводит JOOMtest1JOOMtest3JOOM А надо : JOOMtest1JOOMtest3%test4JOOM |
Цитата:
|
Цитата:
var text = "\*test2";
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(new RegExp("/" + text, "g"), ''));
Работает, большое спасибо, но я "test2" не знаю, там может быть всё что угодно.. Если б знал то воспользовался str_replace и не мучался... Как можно сделать, если я знаю только test1 |
MCTrane, ты меня убиваешь... :D Ты можешь сформулировать задачу?
|
Думай головой. Самый первый вариант рабочий.
|
Цитата:
|
MCTrane, теперь-то оно? :D
var text = "*test2";
text=new RegExp('\\'+text, "g")
alert('JOOMtest1*test2JOOMtest3*test4JOOM'.replace(text, ''));
|
Цитата:
JOOMtest1*test2JOOMtest3%test4JOOMtest5%test6JOOM Я знаю только что нужно вырезать тот участок строки где есть например test1, а на участки делит "JOOM", можно конечно делать explode(), но это слишком много, и я решил через регулярные выражения. Также я хотел сделать через AJAX, но потом подумал что в JS тоже есть рег. выражения. Но с ними сложнее... Т.е. шаблон выреза что-то типа такого: JOOMtest1*[то_что_я_не_знаю]JOOM Причём "то_что_я_не_знаю" я не знаю. Цитата:
|
MCTrane, так тебе нужно убрать что-то от * (звезды) до JOOM? Или опять не то?
|
Цитата:
|
MCTrane, тогда продолжай думать над формулировкой задачи... :D
|
ksa, Ну ты же всё понял...
|
MCTrane, дело не в том что понял я... Дело в том, что таки нужно тебе. ;)
|
Ну мне надо так:
Есть строка JOOMtest1*test2JOOMtest3*test4JOOMtest5*test6JOOM В функцию поступил аргумент "test1", и эта функция должна вырезать тот участок строки где есть "test1", т.е. должно получиться после вызова такой функции так: JOOMtest3*test4JOOMtest5*test6JOOM Ещё один пример: Строка: JOOMtest1*test2JOOMtest3*test4JOOMtest1*test2JOOMt est5*test6JOOM Аргумент: test1 Должно получиться: JOOMtest3*test4JOOMtest5*test6JOOM |
Цитата:
<!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>
|
ksa,Aetae Огромное спасибо за помощь.
|
MCTrane, а можешь рассказать, что это за строка и что ты вообще делаешь?
|
Цитата:
|
В этой строке просто формулы прописаны, и их надо как-то удалять при удалении элемента
|
Цитата:
MCTrane, а почему не хранить формулы в объекте (ассоциативном массиве)?
var formulas = {
'test1': '<формула>',
...
};
delete formulas['test1'];
|
Цитата:
Ещё вопрос есть. Мне ещё надо рег. выражение которое было обратно то которое сделали, т.е. "неизвестное" будет перед "*". Я пытался делать так:
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))
Что-то не работает... Подскажите пожалуйста, что не так? |
Цитата:
|
Не, Aetae дважды в одной теме ленивым халявщикам не отвечает.)
|
x-yuri,
Есть строка JOOMtest2*test1JOOMtest3*test4JOOMtest5*test6JOOM В функцию поступил аргумент "test1", и эта функция должна вырезать тот участок строки где есть "test1", т.е. должно получиться после вызова такой функции так: JOOMtest3*test4JOOMtest5*test6JOOM Ещё один пример: Строка: JOOMtest2*test1JOOMtest3*test4JOOMtest1*test2JOOMt est5*test6JOOM Аргумент: test1 Должно получиться: JOOMtest3*test4JOOMtest5*test6JOOM Выше представленный код почему-то не работает.( |
что в этих строках храниться? Для чего они нужны? Кто придумал такой формат? Начни ответ так: я делаю сайт, на котором...
|
x-yuri,
Придумал формат я. Я просто пытаюсь разобраться в регулярных выражениях в js, в php разобрался, сначала вообще хотел через аякс делать, но узнал что в js тоже есть рег. выражения, только вот литературы по ним нормальной нет, на всех сайтах одно и тоже. В строке хранятся формулы. И мне надо их удалить зная только 1 элемент формулы. |
Цитата:
Цитата:
Цитата:
|
monolithed,
"вы в своем уме Ajax == JavaScript" Ну я имею ввиду делать запрос к php. monolithed, "а спецификации еще нет?" Не знаю. Блин, обьясните пожалуйста почему рег. выражение beg2+'+?.'+end2 не работает? Если я правильно понимаю то "+?" обозначает неизвестные символы, это ".", любой символ. И получается JOOM[неизвестные_символы](любой_символ)test3JOOM |
| Часовой пояс GMT +3, время: 11:35. |