Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于匹配以.#开头的字符串的正则表达式正常的_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 用于匹配以.#开头的字符串的正则表达式正常的

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

我试图确定字符串是以点、hashtag还是无开头,但我相信我做错了什么

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