0

Google Apps Scripts では、次の関数を使用して RegExp を使用して URL を一致させようとしています。

function testRegex(){
  var str = "href='https://sites.google.com/a/domain.com/image-store/images/Image1.jpg?attredirects=0'";
  var regex = new RegExp('http[:a-zA-Z\.\/\-_]{0,100}Image1.jpg', 'gi');
  str = str.replace(regex,"new_url");
  Logger.log(str);
}

http://www.regular-expressions.info/javascriptexample.htmlの正規表現テスターに​​同じ正規表現と文字列を入力すると、機能します。ただし、Google Apps Scripts では機能しません。

理由はありますか?

編集:問題はアンダースコアにあると考えました。\w に置き換えると役立ちます。したがって、正規表現を次のように置き換えると

https[\.a-zA-Z0-9\/+:\w-]{0,100}Image1.jpg

できます。

しかし、それでもアンダースコアには一致しません。たとえば、次の URL では動作しません。

https://sites.google.com/a/domain.com/image-store/_/rsrc/1351707816362/images/Image1.jpg
4

2 に答える 2

2

スラッシュの後に + を追加すると、次のようになります。

function testRegex(){
  var str = "href='https://sites.google.com/a/domain.com/image-store/images/Image1.jpg?attredirects=0'";
  var regex = new RegExp('http[:a-zA-Z\.\/+\-_]{1,100}Image1.jpg', 'gi');
  str = str.replace(regex,"new_url");
  Logger.log(str);
}
于 2013-01-21T19:12:56.570 に答える
0

私はあなたのコードをデバッグしませんでしたが、repl.it で試してみて、Chrome の V8 JavaScript でも正しくないことを確認しました。Apps Script とは関係のないバグがここにあると思われます。

編集:これは機能します:

function testRegex(){
  var str = "href='https://sites.google.com/a/domain.com/image-store/_/rsrc/1351707816362/images/Image1.jpg'";
  var regex = new RegExp('https[\.a-zA-Z0-9\/+:\w_-]{0,100}Image1.jpg', 'gi');
  str = str.replace(regex,"new_url");
  Logger.log(str);
}

文字クラスでアンダースコアを指定していないため、アンダースコアと一致しませんでした。

于 2013-01-21T17:36:30.487 に答える