Javascript:语法错误,无法识别的表达式:<h1>

时间:2016-03-23 05:56:50

标签: javascript jquery html regex

根据Brian Hedlund的建议编辑包含解决方案。解决方案在底部。

我在控制台日志中收到此错误

Syntax error, unrecognized expression: &lt;h1&gt; 

这是产生错误的行

var substring = txt.find(tag).eq(i).text();

示例数据和代码如下。

为什么该行会抛出该错误以及如何解决?

我已经验证函数 _mpactIdeation_countOccurrences()是否正确执行,以及行 mpactIdeation_getTagContentsKeyphrase()中的所有行

var substring = txt.find(tag).eq(i).text();

感谢您的时间和考虑, 添

示例数据:

变量 标记 包含&#34;&lt; h1&gt;&#34;。

变量 kp 包含&#34; fish&#34;。

变量 txt 包含&#34;&lt; p&gt;一个。&lt; / p&gt;&lt; h1&gt; fish&lt; / h1&gt;&lt; p&gt;二鱼。红鱼。蓝鱼。&lt; / p&gt;&#34;。

代码:

this.mpactIdeation_getTagContentsKeyphrase = function( tag, kp ) {
        try {
            var result = 0;
            var num = 0;
            var txt = this.oText;

            var tagcount = this._mpactIdeation_countOccurrences( txt, tag, false );

            txt = jQuery(txt);

            for (i = 0; i < tagcount; i++) {
                tag = this._mpactIdeation_escapeRegExp(tag);
                var substring = txt.find(tag).eq(i).text();
                result += this._mpactIdeation_countOccurrences(substring, kp, false);
            }

            return num;
        }  catch(e) {
            console.log(e);
            return false;
        }
    }

    this._mpactIdeation_countOccurrences = function( string, subString, allowOverlapping ) {
        try {
            string += "";
            subString += "";

            if (subString.length <= 0) return (string.length + 1);

            var num = 0,
                pos = 0,
                step = allowOverlapping ? 1 : subString.length;

            while (true) {
                pos = string.indexOf(subString, pos);
                if (pos >= 0) {
                    ++num;
                    pos += step;
                } else break;
            }
            return num;
        }  catch(e) {
            console.log(e);
            return false;
        }
    }

解决方案:

this.mpactIdeation_getTagContentsKeyphrase = function( tag, kp ) {
    try {
        var result = 0;
        var num = 0;
        var txt = this.oText;

        var tagcount = this._mpactIdeation_countOccurrences( txt, tag, false );

        txt = jQuery(txt);
        tag = this._mpactIdeation_tagToText(tag);

        for (i = 0; i < tagcount; i++) {
            var substring = txt.find(tag).eq(i).text();
            result += this._mpactIdeation_countOccurrences(substring, kp, false);
        }

        return num;
    }  catch(e) {
        console.log(e);
        return false;
    }
}

this._mpactIdeation_countOccurrences = function( string, subString, allowOverlapping ) {
    try {
        string += "";
        subString += "";

        if (subString.length <= 0) return (string.length + 1);

        var num = 0,
            pos = 0,
            step = allowOverlapping ? 1 : subString.length;

        while (true) {
            pos = string.indexOf(subString, pos);
            if (pos >= 0) {
                ++num;
                console.log( "countOccurrences FOUND: " + subString + " INCREMENT");
                pos += step;
            } else break;
        }
        return num;
    }  catch(e) {
        console.log(e);
        return false;
    }
}

this._mpactIdeation_tagToText = function(tag) {
    try {
        return tag = tag.replace(/[<>]/g, '');
    } catch(e) {
        console.log(e);
        return false;
    }
}

1 个答案:

答案 0 :(得分:2)

正确的find语法为find('h1'),而不是find('<h1>')

这将修复您的错误,但找不到您的h1。 find查找搜索目标的后代,并且由于您的txt没有根节点,因此目标h1不是后代,而是兄弟。 .siblings('h1')可以解决问题。