您好我有一个字符串可以是以下之一,或者没有,我正在尝试测试以查看字符串中是否存在两个类名之一。
<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/ );
答案 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
}
}