Android 用のネイティブ JavaScript アプリを作成していますが、短い正規表現呼び出しが必要です。次の関数は、html のブロックから内側の文字列を選択し、長すぎる場合は短くしてから、html ブロックに追加し直します。(とにかくほとんどの場合 -- 完全な html パーサーを書くことはできませんでした。)
私の問題は、特定の入力で、このコードがコマンド「str.search(regex)」でクラッシュすることです。(コマンド「Pre-regex string:」の直前にアラートステートメントを出力しますが、その後の「Pos:」は出力しません。)アプリはAndroidで実行されているため、どのエラーが発生しているのかわかりません投げた。
文字列に対して「search()」を呼び出すと、どのような状況で JavaScript コードがクラッシュする可能性がありますか? これはほとんどの場合に機能するため、正規表現自体に問題はありません。問題を再現することもできません。文字列を 1 文字ずつコピーしてアプリの外部の関数にフィードしても、関数はクラッシュしません。アプリ内では、同じ文字列で関数がクラッシュします。
これが関数です。見やすくするために、アラート コールのタブを変更しました。
trimHtmlString: function(str, len, append) {
append = (append || '');
if(str.charAt(0) !== '<') {
if(str.length > len) return str.substring(0, len) + append;
return str;
}
alert('Pre-regex string: '+str);
var regex = />.+(<|(^>)$)/;
var innerStringPos = str.search(regex);
if(innerStringPos == -1) return str;
alert('Pos: '+innerStringPos);
var innerStringArray = str.match(regex);
alert('Array: '+innerStringArray);
var innerString = innerStringArray[0];
alert('InnerString: '+innerString);
var innerStringLen = innerString.length;
innerString = innerString.substring(1, innerString.length-1);
alert(innerString.length);
if(innerString.length > len) innerString = innerString.substring(0, len) + append;
return str.substring(0, innerStringPos+1)
+ innerString
+ str.substring(innerStringPos+innerStringLen-1, str.length);
}