Javascript——调用string.search(/regex/)偶尔会导致程序崩溃
Javascript -- call to string.search(/regex/) occaisionally crashes program
我正在为android编写一个原生javascript应用程序,它涉及一个简短的正则表达式调用。下面的函数应该从html块中选择内部字符串,如果它太长,将其缩短,然后将其添加回html块。(大多数时候——我写不出一个完美的html解析器。)
我的问题是,在某些输入上,此代码在命令"str.search(regex)"上崩溃。(它在命令"Pre-regex string:"之前打印警告语句,但不打印后面的"Pos:"。)由于应用程序在android上运行,我无法看到抛出什么错误。
在什么情况下javascript代码可能崩溃时调用"search()"的字符串?regex本身没有任何问题,因为它在大多数情况下都是有效的。我也不能重复这个问题:如果我一个字符一个字符地复制字符串并将其输入到应用程序外部的函数中,该函数不会崩溃。在应用程序内部,该函数在同一个字符串上崩溃。
函数如下。我用不同的标签来标记提醒调用,使它们更容易看到。
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);
}
首先,不要用正则表达式解析HTML。我已经警告过你了。接下来,确保总是传递一个实际的字符串。在null
或undefined
上调用.search()
会导致问题。也许您可以提供一个崩溃的示例输入?
IMO,您的正则表达式生成错误,因为您在字符串开始后使用开始锚^。例如:
<span>rabbit</span> don't generate an error
<span>rabbit generate an error
的原因是第一次使用第一次交替,即:<
和第二个使用第二个替代:(^>)$
,这没有意义,因为您的模式已经从>.+
例如,如果您想在前面两个例子中获得单词"rabbit",您可以使用:/(?<=>)[^<]+/
代替
相关文章:
- 引导程序崩溃一次只能看到一个
- Cordova/PhoneGap:使用谷歌地图API的应用程序崩溃
- Phonegap摄像头应用程序崩溃
- 推特引导程序崩溃没有崩溃
- 如何使我的phonegap android应用程序崩溃
- 通过App Store更新基于Cordova/Phonegap的应用程序“崩溃”
- 我的安卓应用程序崩溃了,但我看不出出了什么问题
- Iron Router,Meteor 应用程序崩溃时 router.js 被放置在 /lib 中
- 如果 Chrome 扩展程序崩溃,如何让另一个扩展程序重新加载崩溃的扩展程序
- 节点.js - 事件.js:154 抛出错误写入 EPIPE;程序崩溃
- 在流星中使用会话时应用程序崩溃
- 你好世界电话差距应用程序崩溃
- 由点击查看导致的应用程序崩溃
- 设置间隔导致我的应用程序崩溃
- 离子应用程序崩溃问题
- 传递null值时Heroku应用程序崩溃
- 创建导致 nodejs 应用程序崩溃的缓冲区
- 重新加载页面后,Websocket ruby应用程序崩溃
- 当我介绍ui网格时,Angular应用程序崩溃了
- 引导程序崩溃问题