繁体   English   中英

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

[英]JavaScript regex to match one of several classnames in a string

嗨,我有一个字符串,它可以是以下任意值之一,也可以是无,并且我正在尝试测试该字符串中是否存在两个类名之一。

<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返回类名(斜体,粗体或两者)。

我在这里找到的最相关的帖子是: 需要Regexp替换类名我尝试调整正则表达式以适应我的需求,但是我缺少一些东西。

这是我到目前为止的内容:

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

但是我总会得到空值。 提前致谢!

编辑:这是Javascript中的实际字符串,而不是DOM节点,因此等效于;

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

试试这个:

/^<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将包含所有匹配的类。

我不确定您是否需要正则表达式。 最好使用所需的元素:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM