0

嗨,我有一个字符串,可以是以下字符串之一,也可以没有,我正在尝试测试字符串中是否存在两个类名之一。

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

成功的匹配应该意味着字符串是一个完整的跨度标签,上面有这两个类名之一。理想情况下,如果可能,我希望 string.match 返回类名(斜体、粗体或两者)。

我在这里找到的最相关的帖子是:Need Regexp for classname replace我尝试调整正则表达式以满足我的需求,但我遗漏了一些东西。

这是我到目前为止所拥有的:

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

但我总是得到 null 的比赛。提前致谢!

编辑:它是 Javascript 中的实际字符串,而不是 DOM 节点,因此它相当于;

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 回答