JavaScript正则表达式匹配字符串中的几个类名之一

时间:2013-02-19 14:23:58

标签: javascript regex

您好我有一个字符串可以是以下之一,或者没有,我正在尝试测试以查看字符串中是否存在两个类名之一。

<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/ );

2 个答案:

答案 0 :(得分:1)

试试这个:

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

您忘记匹配可能发生的任何其他类,这是附加[\w\s]*的内容。

<强>更新

由于您无法执行repeating groups in javascript regular expressions,如果您希望在组结果中获得两个类,则必须多次匹配您想要获得的每个类的字符串(最好通过{ {1}}因为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]); } } 将包含所有匹配的类。

答案 1 :(得分: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
    }
}