我正在为 android 编写本机 javascript 应用程序,它涉及一个简短的正则表达式调用。下面的函数应该从一个 html 块中选择内部字符串,如果它太长则缩短它,然后将它添加回 html 块。(无论如何,大多数时候——我无法编写一个完美的 html 解析器。)
我的问题是,在某些输入上,此代码在命令“str.search(regex)”上崩溃。(它会在命令“Pre-regex string:”之前打印出警告语句,但不会在之后打印出“Pos:”。)由于该应用程序在 android 上运行,我看不出是什么错误抛出。
在什么情况下,在字符串上调用“search()”时,javascript 代码可能会崩溃?正则表达式本身没有任何问题,因为这在大多数情况下都有效。我也无法复制该问题:如果我逐个字符地复制字符串并将其输入到应用程序外部的函数中,则该函数不会崩溃。在应用程序内部,函数在同一个字符串上崩溃。
这是功能。我以不同的方式标记了警报呼叫,以使它们更容易看到。
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);
}