0

少し助けが必要です...

次のように、文字列の先頭にある文字に一致する正規表現があります。

次のような一連の文字列がある場合:

レイ・フォックス
フォスター・ジョー
フォレスターを見つける

正規表現

/\bfo[^\b]*?\b/gi 

これは、Fox、Foster、および Forrester の 'FO' と一致します。

ただし、文字列のセットが次のようにhtmlタグでラップされている場合、問題に直面しています;-

<span class="fontColor1">Ray Fox</span>
<span class="fontColor2">Foster Joe</span>
<span class="fontColor3">Finding Forrester</span>

これは fontColor* の 'FO' にも一致します。

私は正規表現にかなり慣れています。クエリを更新して、HTML タグが存在する HTML タグ間の値のみを検索し、HTML タグが存在しない場合でも正しく機能するように、少し助けが必要です。

4

2 に答える 2

0

どうですか

<.*?span.*?>(.*?)<\s?\/.*?span.*?>

そして、htmlタグが存在しないテキストはどこにありますか?それは意味がありません。

編集:

このソリューションはネストされたタグとは一致しませんが、質問が書かれているので、それは問題ではないようです。

于 2012-12-17T15:36:11.993 に答える
0

HTMLパーサーを使用して純粋なテキストを抽出し、それを照合できます。

var root;

try {
    root = document.implementation.createHTMLDocument("").body;
}
catch(e) {
    root = document.createElement("body");
}

root.innerHTML = '<span class="fontColor1">Ray Fox</span>\
            <span class="fontColor2">Foster Joe</span>\
            <span class="fontColor3">Finding Forrester</span>';

//If you are using jQuery
var text = $(root).text();

//Proceed as normal with the text variable

jQuery を使用していない場合は、 に置き換えることが$(root).text()できfindText(root)ますfindText

function findText(root) {
    var ret = "",
        nodes = root.childNodes;
    for (var i = 0; i < nodes.length; ++i) {
        if (nodes[i].nodeType === 3) {
            ret += nodes[i].nodeValue;
        } else if (nodes[i].nodeType === 1) {
            ret += findText(nodes[i]);
        }
    }
    return ret;
}
于 2012-12-17T15:38:50.980 に答える