0

こんにちは、次のいずれかまたはなしの文字列があり、文字列に 2 つのクラス名のいずれかが存在するかどうかをテストしようとしています。

<span class="italic bold">beatae</span>
<span class="bold italic">beatae</span>
<span class="bold">beatae</span>
<span class="italic">beatae</span>

一致が成功した場合は、文字列がこれら 2 つのクラス名のいずれかを持つ完全なスパン タグであることを意味します。可能であれば、string.match がクラス名 (斜体、太字、またはその両方) を返すことが理想的です。

ここで見つけた最も関連性の高い投稿は次のとおりです。クラス名の置換に正規表現が必要です。ニーズに合わせて正規表現を調整しようとしましたが、何かが欠けています。

これは私がこれまでに持っているものです:

/^<span class="(bold|italic)">[^<]*<\/span>$/i

しかし、私は常に一致に対して null を取得します。前もって感謝します!

編集:DOMノードではなく、Javascriptの実際の文字列であるため、;

var mystring = '<span class="bold italic">beatea</span>';
var matches = mystring.match( /regex/ );
4

2 に答える 2

1

これを試してください:

/^<span\sclass="[\w\s]*(bold|italic)+[\w\s]*">[^<]*<\/span>$/i

発生する可能性のある追加のクラスを一致させるのを忘れました。これが追加の内容[\w\s]*です。

アップデート

javascript の正規表現でグループを繰り返すことはできないため、グループの結果で両方のクラスを取得する場合は、取得するクラスごとに文字列を複数回一致させる必要があります(この場合は役に立たないindexOfため、経由が望ましい):RegExp

 var classesToMatch = ['italic', 'bold'],
     matchedClasses = [],
     htmlString = "<span class='bold italic'>beatae</span>";
 for (var i = 0; i < classesToMatch.length; i++) {
   if (htmlString.indexOf(classesToMatch[i]) > -1) {
     matchedClasses.push(classesToMatch[i]);
   }
 }

matchedClasses一致したすべてのクラスが含まれます。

于 2013-02-19T14:27:18.897 に答える
0

正規表現が必要かどうかわかりません。必要な要素を使用することをお勧めします。

var array = document.getElementsByTagName('span'); // get all span elements
//check each span element for class 'italic' or 'bold'
for(i=0;i<array.length;i++) {
    if((array[i].className.indexOf('bold') != -1) || (array[i].className.indexOf('italic') != -1))  {
    //if there are our classes - do something with this span
    console.log(array[i]); // array[i] - is a span which contains certain classes
    }
}
于 2013-02-19T14:43:55.850 に答える