Javascript 用于匹配以.#开头的字符串的正则表达式正常的
我试图确定字符串是以点、hashtag还是无开头,但我相信我做错了什么Javascript 用于匹配以.#开头的字符串的正则表达式正常的,javascript,jquery,regex,Javascript,Jquery,Regex,我试图确定字符串是以点、hashtag还是无开头,但我相信我做错了什么 Selector.match = { 'id' : new RegExp('^#(' + identifier + ')' ), 'class' : new RegExp('^\\.(' + identifier + ')' ), 'tag' : new RegExp('^(' + identifier + '|[*])' ), }; if (Selector.ma
Selector.match = {
'id' : new RegExp('^#(' + identifier + ')' ),
'class' : new RegExp('^\\.(' + identifier + ')' ),
'tag' : new RegExp('^(' + identifier + '|[*])' ),
};
if (Selector.match['id'].exec(this.selector)) {
console.log('ID');
this.result.push(document.getElementById(this.selector));
} else if (Selector.match['id'].exec(this.selector)) {
this.result.push(document.getElementsByClassName(this.selector));
} else if (Selector.match['tag'].exec(this.selector)) {
this.result.push(document.getElementsByTagName(this.selector));
}
我试图“模拟”jquery获取元素的方式,但由于标识符不存在而无法工作
谢谢。您需要定义标识符 您可以从以下简单内容开始:
var identifier='[A-Za-z0-9_]';
但这要复杂得多。您可以在此处找到更深入的详细信息:
另外,您的第二个正则表达式比较是再次测试id,它应该是类
} else if (Selector.match['id'].exec(this.selector)) {
this.result.push(document.getElementsByClassName(this.selector));
到
在任何情况下,您的代码都会在更复杂的选择器上失败,例如:
- myid.class
- .class#id
- .class1.class2
- a、 阶级
- .aa:最后一个孩子
- myid>p
- myid:不是(.class)
.test
而不是.exec
.exec
将起到一定的作用,因为如果匹配,它将返回一个信息数组;如果不匹配,它将返回null,这应该满足if语句中的布尔值,但是.test
才是真正需要的
当然,您可以将整个代码替换为:
var x = document.querySelectorAll(this.selector);
适用于所有现代浏览器(IE 9+、Chrome 4+、Firefox 3.6+、Safari 3.2+)
函数getElements(选择器)
{
返回单据.查询选择器all(选择器);
}
log(getElements());
log(getElements('#one');
log(getElements('#two');
log(getElements('.two');
log(getElements('.one'));
log(getElements('*');
log(getElements('div'));
log(getElements('blah'))代码>
您需要定义标识符 您可以从以下简单内容开始:
var identifier='[A-Za-z0-9_]';
但这要复杂得多。您可以在此处找到更深入的详细信息:
另外,您的第二个正则表达式比较是再次测试id,它应该是类
} else if (Selector.match['id'].exec(this.selector)) {
this.result.push(document.getElementsByClassName(this.selector));
到
在任何情况下,您的代码都会在更复杂的选择器上失败,例如:
- myid.class
- .class#id
- .class1.class2
- a、 阶级
- .aa:最后一个孩子
- myid>p
- myid:不是(.class)
.test
而不是.exec
.exec
将起到一定的作用,因为如果匹配,它将返回一个信息数组;如果不匹配,它将返回null,这应该满足if语句中的布尔值,但是.test
才是真正需要的
当然,您可以将整个代码替换为:
var x = document.querySelectorAll(this.selector);
适用于所有现代浏览器(IE 9+、Chrome 4+、Firefox 3.6+、Safari 3.2+)
函数getElements(选择器)
{
返回单据.查询选择器all(选择器);
}
log(getElements());
log(getElements('#one');
log(getElements('#two');
log(getElements('.two');
log(getElements('.one'));
log(getElements('*');
log(getElements('div'));
log(getElements('blah'))代码>
只是给你一个我在评论中提到的例子 在每种情况下都返回一个实数组,因此在结果上可以使用数组方法 因为它返回一个数组,所以该数组不是活动列表
var slicer=Array.prototype.slice;
函数getElements(选择器){
var修剪,
元素;
如果(选择器的类型=='string'){
修剪=选择器。修剪();
开关(微调字符(0)){
案例“”:
elements=slicer.call(document.getElementsByClassName(trimmed.slice(1));
打破
案例“#”:
elements=document.getElementById(trimmed.slice(1));
如果(元素){
元素=[元素];
}否则{
元素=[];
}
打破
违约:
elements=slicer.call(document.getElementsByTagName(trimmed));
}
}否则{
元素=[];
}
返回元素;
}
log(getElements());
log(getElements('#one');
log(getElements('#two');
log(getElements('.two');
log(getElements('.one'));
log(getElements('*');
log(getElements('div'));
log(getElements('blah'))代码>
只是给你一个我在评论中提到的例子
在每种情况下都返回一个实数组,因此在结果上可以使用数组方法
因为它返回一个数组,所以该数组不是活动列表
var slicer=Array.prototype.slice;
函数getElements(选择器){
var修剪,
元素;
如果(选择器的类型=='string'){
修剪=选择器。修剪();
开关(微调字符(0)){
案例“”:
elements=slicer.call(document.getElementsByClassName(trimmed.slice(1));
打破
案例“#”:
elements=document.getElementById(trimmed.slice(1));
如果(元素){
元素=[元素];
}否则{
元素=[];
}
打破
违约:
elements=slicer.call(document.getElementsByTagName(trimmed));
}
}否则{
元素=[];
}
返回元素;
}
log(getElements());
log(getElements('#one');
log(getElements('#two');
log(getElements('.two');
log(getElements('.one'));
log(getElements('*');
log(getElements('div'));
log(getElements('blah'))代码>
仅供学习:b您可以演示如何通过html等调用此函数吗?您不能只查看选择器.charAt(0)
并将===
与“#”
或”
等进行比较。您真的需要RegExp吗?当然,您可能想要强制s