2013-02-19 27 views
0

嗨我有一個字符串,可以是以下之一,或者沒有,我試圖測試以查看字符串中是否存在兩個類名之一。JavaScript正則表達式匹配字符串中幾個類名稱之一

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

成功的匹配應該意味着該字符串是一個完整的span標記,其中包含這兩個類名之一。理想情況下,我希望string.match在可能的情況下返回類名(斜體,粗體或兩者)。

我在這裏找到的最相關的帖子是這樣的:Need Regexp for classname replace我試圖調整正則表達式來適應我的需求,但我錯過了一些東西。

這是我到目前爲止有:

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

但我總是得到空的匹配。提前致謝!

編輯:這是一個實際的字符串在JavaScript中,而不是一個DOM節點,所以它相當於;

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

你對比什麼? – Bergi 2013-02-19 14:25:55

+1

你可以使用jQuery來做到這一點。 if($('span')。hasClass('italic')|| $('span')。hasClass('bold'))' – 2013-02-19 14:26:06

+1

您需要添加一些上下文。您是否使用outerHTML來獲取字符串,className或什麼? – adeneo 2013-02-19 14:26:50

回答

1

試試這個上:

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

你忘了匹配可能發生的,這是額外的[\w\s]*是任何其他類。

UPDATE

既然你不能做repeating groups in javascript regular expressions,您必須將字符串多次匹配你想獲得的每個類,如果你想獲得類組成績(最好是通過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將包含所有匹配的類。

+0

非常接近,帶有兩個類名的測試字符串.match返回一個數組,其原始字符串爲[0]匹配,並且匹配[1]爲斜體。它缺少大膽的課程。 – Jonathan 2013-02-19 14:34:41

+0

更新現在完美謝謝!我沒有意識到JS不能這麼做,很高興知道。 – Jonathan 2013-02-19 14:55:44

0

我不確定你需要regexp。最好與你需要的元素一起工作:

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 
    } 
} 
+1

它不是一個DOM節點,它是一個字符串。不過謝謝。 – Jonathan 2013-02-19 14:45:03

相關問題