7

ねえ、私はjavascriptのregexでかなり具体的なことをしようとしていますが、私のregexp-fooはせいぜい不安定です。私を正しい方向に向けることができるプロがそこにいるのだろうかと思いました。だから私はいくつかのテキストを持っています...

<item id="myid1">myitem1</item>
<item id="myid2">myitem2</item>

...等

そして、それをmyid1、myitem1、myid2、myitem2、....etcを読み取る配列に分解したいと思います。

ネストされた要素が存在することはないため、再帰的なネストの問題はありません。これをすぐに打ち負かすことができる人はいますか?ご協力いただきありがとうございます!

4

4 に答える 4

10

これが次の正規表現です。

  • 開始タグと終了タグの要素名を一致させる
  • id属性の値を抽出します
  • タグの内部htmlコンテンツを抽出します

注:ここで属性値を一致させるのは面倒です。二重引用符で囲む必要があり、属性名とその値の間にスペースを入れないでください。

<([^\s]+).*?id="([^"]*?)".*?>(.+?)</\1>

javascriptで正規表現を実行すると、次のようになります。

search = '<item id="item1">firstItem</item><item id="item2">secondItem</item>';
regex = new RegExp(/<([^\s]+).*?id="([^"]*?)".*?>(.+?)<\/\1>/gi);
matches = search.match(regex);
results = {};
for (i in matches) {
    parts = regex.exec(matches[i]);
    results[parts[2]] = parts[3];
}

この最後に、results次のようなオブジェクトがあります。

{
    "item1": "firstItem",
    "item2": "secondItem"
}

<item>要素にネストされたHTMLが含まれている場合はYMMV。

于 2010-07-17T11:11:08.293 に答える
3

誰かが本当に好きであるか、またはIDでHTMLタグを取得するために正規表現を使用する必要がある場合(質問の件名のように)、彼は私のコードを使用できます:

function GetTagByIdUsingRegex(tag,id,html) {
    return new RegExp("<" + tag + "[^>]*id[\\s]?=[\\s]?['\"]" + id + "['\"][\\s\\S]*?<\/" + tag + ">").exec(html);
}

クラス名で要素を取得するための1つも作成しました。

function GetTagByClassUsingRegex(tag,cls,html) {
    return new RegExp("<" + tag + "[^>]*class[\\s]?=[\\s]?['\"]" + cls + "[^'\"]*['\"][\\s\\S]*?<\/" + tag + ">").exec(html);
}
于 2016-01-21T10:11:38.353 に答える
0

私は常にこのサイトを使用して正規表現を作成しています。

http://www.pagecolumn.com/tool/regtest.htm

これは私が思いついた正規表現です:

(<[^>]+>)([^<]+)(<[^>]+>)

そして、これはページがJavaScriptのために私に与える結果です

RegExpオブジェクトの使用:

var str = "<item id="myid1">myitem1</item><item id="myid2">myitem2</item><ssdad<sdasda><>dfsf";
var re = new RegExp("(<[^>]+>)([^<]+)(<[^>]+>)", "g");
var myArray = str.match(re);

リテラルの使用:

var myArray = str.match(/(<[^>]+>)([^<]+)(<[^>]+>)/g)

if ( myArray != null) {
    for ( i = 0; i < myArray.length; i++ ) { 
        var result = "myArray[" + i + "] = " + myArray[i];
    }
}
于 2010-07-17T10:33:24.520 に答える
0

これはxml文字列です。私の意見では、 XMLパーサーはこの種のタスクに最も適しているようです。以下をせよ:

var items = document.getElementsByTagName("item") ; //<> use the parent element if document is not
var dataArray = [ ] ;

for(var n = 0 ; n < items.length ; n++) {

     var id = items[n].id ;
     var text = items[n].childNodes[0] ;

         dataArray.push(id,text) ;

}

問題がxml文字列をxmlオブジェクトに変換できないことである場合は、事前にDOMパーサーを使用する必要があります。

var xmlString = "" ; //!! your xml string
var document = null ;

    if (window.ActiveXObject) { //!! for internet explorer

            document = new ActiveXObject("Microsoft.XMLDOM") ;
            document.async = "false" ;
            document.loadXML(xmlString) ;

    } else { //!! for everything else

        var parser = new DOMParser() ;
            document = parser.parseFromString(xmlString,"text/xml") ;

    }

次に、上記のスクリプトを使用します。

于 2010-07-17T11:01:41.607 に答える