2013-08-30 3 views
-1

У меня есть этот текст:RegEx - Изменение значения

<script type="text/javascript" id="wordpress_grazit_script">   
      var dbnurls = []; 
      var dbnanchors = []; 
      dbnurls.push('url'); 
      dbnanchors.push('anchor'); 
      var script = document.createElement("script"); 
      script.setAttribute("src", dbn_protocol+"path to js"); 
      script.setAttribute("type", "text/javascript"); 
      script.setAttribute("id", "grazit_script"); 
      document.getElementById("my-id").parentNode.appendChild(script); 
    </script> 

и мне нужно заменить dbn_protocol + «путь к Js» с чем-то другим.

Я попытался использовать этот шаблон совпадения, но он полностью соответствует последнему);

"script\\.setAttribute\\([\"']src[\"'],(.*[^\\);])(\\);)(.*)" 

Мне нужно spcify, что мне нужно это регулярное выражение в C# .NET

Спасибо

+0

Какой язык вы используете для обработки текста сценария? Это также javascript или что-то еще? – lurker

+2

Посмотрите на не-жадное соответствие (http://msdn.microsoft.com/en-us/library/3206d374.aspx). В настоящее время ваш '. *' Будет захватывать все, что может, вы хотите, чтобы он захватил минимальную возможную сумму, поэтому вам понадобится '. *?'. – Chris

+0

Кроме того, почему бы не просто сопоставить шаблон '" dbn_protocol + "path to js" и заменить его, а не делать более сложные вещи? – Chris

ответ

0

Спасибо, Chris за ваш ответ. Проблема была в том, что вы сказали. Регулярное выражение было жадным и дошло до последнего матча. Я положил '?' и все это сработало.

Thank you

0

Если в JavaScript вы можете сделать это следующим образом:

var result = yourScriptString.replace(
    /(script\.setAttribute\("src",)(.*)(\))/, 
    " $1'" + someUrl + "'$3"); 

См this jsfiddle для Детали.

1

Вы могли бы соответствовать только из dbn_protocol (и использовать @ символ при определении регулярных выражений, так что вы не должны делать кучу двойных побегов):

var regex = new Regex(@"dbn_protocol\+""[^""]+"""); 

ideone example.

Использование кавычек не позволит регулярному выражению совместить более path to js.

+0

Спасибо за совет '@', но я точно не знаю, что dbn_protocol всегда есть, может быть любое значение, строка или переменная. –

+0

@ DanielTranca О, я думал, что строка, которую вы имели, имела «dbn_protocol» statis (как в непеременной). – Jerry

0

Если вы хотите заменить dbn_protocol + «путь к Js», существует несколько способов для достижения этой цели, сначала вы можете непосредственно заменить dbn_protocol + «путь к Js» с чем-то новым, используя

string.Replace(string searchterm,string replacementterm); 

но, как вы уже сказали, вы хотите, чтобы материал в регулярном выражении, поэтому попробуйте метод ниже, он возвращает новую строку (это новый раздел сценария с dbn_protocol + «путь к js» заменен на). Это должно удовлетворить вас, как это делается с помощью регулярное выражение; более

Regex r = new Regex(@"dbn_protocol\+""[^""]+"""); 
string newscript=r.Replace("your script's text","the replacement string"); 
//newscript is the script text that you need. 

Одна вещь, я хотел бы отметить, если вам нужно изменить это абсолютно один раз, то почему вы выбрали делать это в коде, а вы легко можете сделать это вручную.

Надеюсь, он работает.

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