javascript reg exp
15 отговора
532 прегледа
javascript reg exp
най-много се надявам на котарака да помогне
имам следният проблем
ghs = "hello<-- Begin //-->blah blah<-- End //-->bye";
var ghs2 = ghs.match(/Begin([\s]+)?(\/\/)?\-\->(.+)/g)[0].replace(/Begin([\s]+)?(\/\/)?\-\->/,"");
alert(ghs2); и ми изкарва "blah blah<-- End //-->bye", но искам да ми остане само blah blah и всичко възможно, било то каквото и да е било, преди и след него( тоест преди и след коментарите) да се махне.
благодаря предварително за помоща
имам следният проблем
ghs = "hello<-- Begin //-->blah blah<-- End //-->bye";
var ghs2 = ghs.match(/Begin([\s]+)?(\/\/)?\-\->(.+)/g)[0].replace(/Begin([\s]+)?(\/\/)?\-\->/,"");
alert(ghs2); и ми изкарва "blah blah<-- End //-->bye", но искам да ми остане само blah blah и всичко възможно, било то каквото и да е било, преди и след него( тоест преди и след коментарите) да се махне.
благодаря предварително за помоща
Ъъъ...
това ли имаш предвид?
var ghs2 = ghs.match(/Begin([\s]+)?(\/\/)?\-\->(.+)/g)[0].replace(/Begin([\s]+)?(\/\/)?\-\->/,"").replace(/\<\-\-\s+End\s+\/\/\-\-\>.+/,'');
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
var ghs2 = ghs.match(/Begin([\s]+)?(\/\/)?\-\->(.+)/g)[0].replace(/Begin([\s]+)?(\/\/)?\-\->/,"").replace(/\<\-\-\s+End\s+\/\/\-\-\>.+/,'');
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
но сега и друг проблем
първият коментар има и "", тък като кода е създаден с дрийма и има кавички. доброто е, че има точно определена дума <!-- InstanceBeginEditable name="primary content" --> и завършва на <!-- InstanceEndEditable -->, така че ако можеш да ми помогнеш да се показва само това между коментарите
Тва не го разбрах...
ще поясниш ли? 
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
Re: Тва не го разбрах...
имам в предвид, че първият коментар има 2 кавички и точно определена дума. искам да направя така, че да ми се изписва само това което е между първият коментар и последният. тоест:
всичко което е тука и следващият коментар да изчезва<!-- begin name="primary content" -->да ми излиза само това тук<!-- end -->и всичко след този коментар и самият той да изчезва
всичко което е тука и следващият коментар да изчезва<!-- begin name="primary content" -->да ми излиза само това тук<!-- end -->и всичко след този коментар и самият той да изчезва
Re: Тва не го разбрах...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[линк]">
<html>
<head>
<title></title>
<script type="text/javascript">
var re=new RegExp('<!-- begin name="primary content" -->((?:(?!<!-- end -->).)+)<!-- end -->','g');
var str='xcxcxcxcxcxc<!-- begin name="primary content" -->Shte vzemem samo tozi tekst tuka<!-- end -->asasasas';
re.exec(str);
alert(RegExp.$1);
</script>
</head>
<body>
</body>
</html>
От неизбежното се възмущава само този, който е неразумен.
Редактирано от Учeщ на
second version
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[линк]">
<html>
<head>
<title></title>
<script type="text/javascript">
/*******
* Тази second version се налага поради причината че
* "." символа ни съответства на всеки единичен
* символ с изключения на знаците за нов ред и
* връщане на каретката. Ако случайно в низа има
* \r или \n това ще ни постави в неприятно положение.
* Затова добавям провека и за тях.
***/
var re=new RegExp('<!-- begin name="primary content" -->((?:(?!<!-- end -->).|\n|\r)+)<!-- end -->','gi');
var str='xcxcxcxcxcxc<!-- begin name="primary content" -->\r\nВсичко е точно.<!-- end -->asasasas';
re.exec(str);
alert(RegExp.$1);
</script>
</head>
<body>
</body>
</html>
От неизбежното се възмущава само този, който е неразумен.
Third Version
Тъй ще да е по-лесно и разбираемо
var re=new RegExp('<!-- begin name="primary content" -->((.|\n|\r)*)(?=<!-- end -->)','gi');
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
var re=new RegExp('<!-- begin name="primary content" -->((.|\n|\r)*)(?=<!-- end -->)','gi');
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
Re: second version
аз си го направих предварително да ми прави целият стринг на един ред преди да го пусне за проверка, тъй като точно поради тази причина ми изрева за грешка. благодаря отново
ето го и крайното
това в който и да е файл
<li id="impresion"><a href="#">Imprimir</a></li>
-------------------------------------------------------------------------
и javascript към него плюс
//jquery.js code
+
function imprimir(){
$("#impresion").click(function(){
doc_ref = "imprimir.html?url_to_print="+escape(document.location.href);
window.open(doc_ref,"","width=800px, height=500px, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes");
});
}
function parseQuery ( query ) {
var Params = new Object ();
if ( ! query ) return Params; // return empty object
var Pairs = query.split(/[;&]/);
for ( var i = 0; i < Pairs.length; i++ ) {
var KeyVal = Pairs.split('=');
if ( ! KeyVal || KeyVal.length != 2 ) continue;
var key = unescape( KeyVal[0] );
var val = unescape( KeyVal[1] );
val = val.replace(/\+/g, ' ');
Params[key] = val;
}
return Params;
}
var xmlhttp
function loadXMLDoc(url)
{
xmlhttp=null
if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest() }
else if (window.ActiveXObject) { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP") }
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange=state_Change
xmlhttp.open("GET",url,true)
xmlhttp.send(null)
}
else{ alert("Error al abrir el archivo para imprimir!") }
}
function state_Change()
{
if(xmlhttp.readyState==4){
if (xmlhttp.status==200) {
var ghs = xmlhttp.responseText.replace(/\r|\n|\r\n/g,'');
re.exec(ghs);
document.getElementById('print_container').innerHTML="<div id=\"primary-content\">"+RegExp.$1;
}
else{ alert("Error al abrir el archivo para imprimir!") }
}
}
-----------------------------------------------------------------------------
отваря се imprimir.html
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<body>
<script type="text/javascript">
$(document).ready(function(){
var queryString = document.URL.replace(/^[^\?]+\??/,'');
var params = parseQuery( queryString );
Printurl = unescape(params['url_to_print']);
Printfile = Printurl.split("/");
i = Printfile.length-1;
loadXMLDoc(Printfile);
//alert(Printfile);
//window.focus();
//window.print();
});
</script>
</head>
<body>
<div id="print_container"></div>
</body>
</html>
<li id="impresion"><a href="#">Imprimir</a></li>
-------------------------------------------------------------------------
и javascript към него плюс
//jquery.js code
+
function imprimir(){
$("#impresion").click(function(){
doc_ref = "imprimir.html?url_to_print="+escape(document.location.href);
window.open(doc_ref,"","width=800px, height=500px, toolbar=no, status=no, menubar=no, location=no, scrollbars=yes");
});
}
function parseQuery ( query ) {
var Params = new Object ();
if ( ! query ) return Params; // return empty object
var Pairs = query.split(/[;&]/);
for ( var i = 0; i < Pairs.length; i++ ) {
var KeyVal = Pairs.split('=');
if ( ! KeyVal || KeyVal.length != 2 ) continue;
var key = unescape( KeyVal[0] );
var val = unescape( KeyVal[1] );
val = val.replace(/\+/g, ' ');
Params[key] = val;
}
return Params;
}
var xmlhttp
function loadXMLDoc(url)
{
xmlhttp=null
if (window.XMLHttpRequest) { xmlhttp=new XMLHttpRequest() }
else if (window.ActiveXObject) { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP") }
if (xmlhttp!=null)
{
xmlhttp.onreadystatechange=state_Change
xmlhttp.open("GET",url,true)
xmlhttp.send(null)
}
else{ alert("Error al abrir el archivo para imprimir!") }
}
function state_Change()
{
if(xmlhttp.readyState==4){
if (xmlhttp.status==200) {
var ghs = xmlhttp.responseText.replace(/\r|\n|\r\n/g,'');
re.exec(ghs);
document.getElementById('print_container').innerHTML="<div id=\"primary-content\">"+RegExp.$1;
}
else{ alert("Error al abrir el archivo para imprimir!") }
}
}
-----------------------------------------------------------------------------
отваря се imprimir.html
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<body>
<script type="text/javascript">
$(document).ready(function(){
var queryString = document.URL.replace(/^[^\?]+\??/,'');
var params = parseQuery( queryString );
Printurl = unescape(params['url_to_print']);
Printfile = Printurl.split("/");
i = Printfile.length-1;
loadXMLDoc(Printfile);
//alert(Printfile);
//window.focus();
//window.print();
});
</script>
</head>
<body>
<div id="print_container"></div>
</body>
</html>
Fourth Version
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "[линк]">
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html;charset=windows-1251">
<script type="text/javascript">
/*******
* Доста готино алтернативно решение
* с positive lookahead предлагаш
* обаче мен лично не ме кефи така както е :
* ((.|\n|\r)*) запомняш го веднъж в backreference
* след това я повтаряш и отново запомняш резултата.
* По-готино е да спестим едно запомняне ето така:
* ((?:.|\n|\r)*)
***/
var re=new RegExp('<!-- begin name="primary content" -->((?:.|\n|\r)*)(?=<!-- end -->)','gi');
var str='xcxcxcxcxcxc<!-- begin name="primary content" -->\r\nВсичко е точно.<!-- end -->asasasas';
re.exec(str);
alert(RegExp.$1);
</script>
</head>
<body>
</body>
</html>
От неизбежното се възмущава само този, който е неразумен.
А какво...
ще кажеш за това?
var re=new RegExp(/<!-- begin name="primary content" -->([\s\S]*)(?=<!-- end -->)/gi);
Всъщност това щеше да е още предното предложение, но не се усетих че използваш апострофи при дефинирането на регулярния израз, в следствие на което класове като \w, \s и прочие требе да се указват така: \\w \\s.
Дебъгнах го и сичко си пролича... Кат стана дума - новия Firebug 0.4 вече има и debug
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
var re=new RegExp(/<!-- begin name="primary content" -->([\s\S]*)(?=<!-- end -->)/gi);
Всъщност това щеше да е още предното предложение, но не се усетих че използваш апострофи при дефинирането на регулярния израз, в следствие на което класове като \w, \s и прочие требе да се указват така: \\w \\s.
Дебъгнах го и сичко си пролича... Кат стана дума - новия Firebug 0.4 вече има и debug
There are three determined states the cat could be in: Alive, Dead, and Bloody Furious.
Редактирано от KoтapakътнaШpьoдинrep на
Respect
Стана много интересно.
Edit: И аз се чудех защо не ми мачва класовете но имах друга работа и го зарязах с alternation тогава.
От неизбежното се възмущава само този, който е неразумен.
Edit: И аз се чудех защо не ми мачва класовете но имах друга работа и го зарязах с alternation тогава.
От неизбежното се възмущава само този, който е неразумен.
Редактирано от Учeщ на