基本上我试图提取少数不同的css选择器的最后一个标签名称。
我已经成功实现了我在javascript中所讨论的内容,我正在寻找一种更简洁的方式,最好只使用1个正则表达式。
这是我成功的工作。
//Trim selector, remove [attr] selectors due to conflicts, and standardize >,~,
selector=selector.replace(/^(\s|\u00A0)+|(\s|\u00A0)+$/g,'')
selector=selector.replace(/\[[^\]]*\]/g,'[]').replace(/\s*([>~\s])\s*/g,'$1');
var theSplit = selector.split(/[>~\s]/);
selector = /^[^.\[:]*/.exec(theSplit[theSplit.length-1]) || "*";
我只是想支持Internet Explorer 7 100%支持的css 2.0选择器。
例如+ selector和:first-child选择器在ie7中是静态的,因此我不需要支持它们。 以下是必须使用的css选择器列表。
#test span ul a
#test >span[style="background:green"]
#id + span ~ article.class
section header.class
body
div
body div
div p
div > p
div ~ p
div[class^=exa][class$=mple]
div p a
.note
div.example
ul .tocline2
#title
h1#title
div #title
ul.toc li.tocline2
ul.toc > li.tocline2
a[href][lang][class]
div[class]
div[class=example]
div[class^=exa]
div[class$=mple]
div[class*=e]
div[class|=dialog]
div[class!=made_up]
div[class~=example]
编辑:我最终使用了这个脚本。它甚至考虑了通用选择器
var lastTagName = selector.replace(/\[[^\]]+\]|[\.#][\w-]+|\s*$/g,'').replace(/^.*[^\w]/, '')||'*'
答案 0 :(得分:1)
选择器开头的东西应该很容易删除作为最后一步,所以让我们首先关注从末尾删除两种类型的垃圾。这是方括号中的内容以及.
或#
之后的内容。
str = str.replace(/\[[^\]]+\]/g, '').replace(/[\.#][a-z0-9]+/gi, '');
也就是说,删除方括号之间的所有内容(在整个表达式中;如果它先前捕获了内容就没关系),然后同样适用于.
和#
选择器。
然后,最后,取出所有导致非字母数字字符的内容,其中包含空格>
等等。这将只留下字符串中的最后一个“单词”(在本例中为标记名称):
str = str.replace(/^.*[^a-z0-9]/i, '');
尝试一下jsFiddle:http://jsfiddle.net/JAA98/