无法在javascript for循环中读取null的属性’length’
我正在尝试制作像Stack Overflow这样的降价编辑器。
如果我实际上没有在textarea中键入星号和包含短语的http://,我会在标题中列出此错误。 如果我只输入包含短语的星号,则错误引用此行: if(linkify.length!==0)
这是一个向您展示我的意思的jsfiddle 。
这是我的HTML:
这是我的JS:
var val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim), italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim); $(document.body).on('click', 'button', function() { val=$('textarea').val(), boldify = val.match(/\*\*[A-Za-z0-9]+\*\*/gim), italicify = val.match(/\*[A-Za-z0-9]+\*/gim),linkify = val.match(/http\:\/\/[A-z0-9]+\.[A-z0-9]+/gim); if (boldify.length!== 0){ for (var i=0; i < boldify.length; i++) { var boldMatch= boldify[i], boldReplace = boldMatch.replace(/\*\*[A-z0-9]+\*\*/gim, ''+boldMatch+''), val = val.replace(boldMatch, boldReplace); } val = val.replace(/\*\*/gi, ""); } if(italicify.length!== 0){ for(var j=0; j < italicify.length; j++){ var italicMatch= italicify[j], italicReplace = italicMatch.replace(/\*[A-z0-9]+\*/gim, ''+italicMatch+''); val = val.replace(italicMatch, italicReplace); } val = val.replace(/\*/gi, ""); } if(linkify.length!== 0){ for(var k=0; k < linkify.length; k++){ var linkMatch= linkify[k], linkReplace = linkMatch.replace(/http:\/\/[A-z0-9]+\.[A-z0-9]+/gim, ''+linkMatch+''); val = val.replace(linkMatch, linkReplace); } } $('div').html(val); });
任何帮助将不胜感激。
如果字符串与提供的正则表达式不匹配,则使用返回null的match
函数,而不是使用返回true / false的test
函数,然后如果需要,可以使用match
函数。
基本上你执行null.length
这显然是无效的,因为match
返回null
或者你可以在检查长度之前执行null
检查,然后只进行一次正则表达式匹配。
if(linkify!==null && linkify.length!== 0) { //do smthing }
如果文本中没有’http://’匹配,’linkify’为null,因此您需要测试该条件:
if(linkify && linkify.length)