我正在为 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);
  }