Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.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 为什么';这个RegExp是否有效?哪个符号更符合标准?_Javascript_Regex_Firefox - Fatal编程技术网

Javascript 为什么';这个RegExp是否有效?哪个符号更符合标准?

Javascript 为什么';这个RegExp是否有效?哪个符号更符合标准?,javascript,regex,firefox,Javascript,Regex,Firefox,免责声明:我意识到问“为什么我的正则表达式不能工作”是相当业余的 我已经看过了,虽然我只是在挣扎。我有一个url(作为字符串),我想要的是替换占位符(即{objectID}和{queryTerm} 一段时间以来,我一直在做这样的尝试: var _serviceURL = "http://my-server.com/rest-services/someObject/{objectID}/entries?term={queryTerm}"; var re1 = new RegExp("/{([A-

免责声明:我意识到问“为什么我的正则表达式不能工作”是相当业余的

我已经看过了,虽然我只是在挣扎。我有一个url(作为字符串),我想要的是替换占位符(即
{objectID}
{queryTerm}

一段时间以来,我一直在做这样的尝试:

var _serviceURL = "http://my-server.com/rest-services/someObject/{objectID}/entries?term={queryTerm}";

var re1 = new RegExp("/{([A-Za-z])+}","gi");  
var re2 = new RegExp("/{([A-Za-z]+)}+","gi");  
var re3 = new RegExp("/{([A-Za-z])+}","gi");  
var re4 = new RegExp("/({[A-Za-z]+})+","gi");  
var re5 = new RegExp("({[A-Za-z]+})+","gi");  
var re6 = new RegExp("({[A-Za-z]}+)*","g");  
var re6a = new RegExp("({([a-z]+)})+","gi");  

var re7 = /{([^}]+)}/g;

var tokens =  re6A.exec(_serviceURL);
if (null != tokens.length ){
    for(i = 0; i < tokens.length; i++){
        var t = tokens[i];
        console.log("tokens[i]: " + t);
    }            
}
else {
    console.log("RegEx fail...")
}
与上述场景相关:

  • 为什么我从未收到
    queryTerm
  • RegExp'i'(忽略大小写)标志是否意味着我可以列出像[a-z]这样的字符类并捕获[a-z]
  • 哪种构造RegExp对象的方法更好?
    …新的RegExp(…);
    var RegExp=/{([^}]+)}/g;
    。就“更好”而言,我的意思是跨浏览器兼容性,与其他RegEx实现类似(如果我在学习RegEx,我想从中获得最大的价值)
  • RegExp
    i
    (忽略大小写)标志是否意味着我可以列出像
    [a-z]
    这样的字符类,还可以捕获
    [a-z]

    是的,它会把他们都抓到

    哪种构造RegExp对象的方法更好?
    newregexp(…)
    var RegExp=/{([^}]+}/g;
    ?就“更好”而言,我的意思是跨浏览器兼容性,与其他RegEx实现类似(如果我在学习RegEx,我想从中获得最大的价值)

    您肯定应该使用文字符号。
    它在运行时编译一次,而不是每次使用它。
    它们都具有相同的跨浏览器兼容性


    尽管如此,我还是用这个:

    _serviceURL.match(/[^{}]+(?=})/g);
    
    这是小提琴:


    下面是对上述正则表达式的解释:

    [    opens the character set
     ^    negates the set. Will only match whatever is NOT in these brackets
     {}   match anything that is NOT a curly brace
    ]    close the character set
    +    match that as many times as possible
    (?=  ascertain that it is possible to match the following here (won't be included in the match, this is called a lookahead)
     }    match a curly brace
    )    close the lookahead
    

    当您要替换占位符时,使用
    replace
    似乎比使用
    match
    更为自然,例如:

    var _serviceURL = "http://my-server.com/rest-services/someObject/{objectID}/entries?term={queryTerm}"
    
    var values = {
        objectID: 1234,
        queryTerm: "hello"
    }
    
    var result = _serviceURL.replace(/{(.+?)}/g, function($0, $1) {
        return values[$1]
    })
    

    产量<代码>http://my-server.com/rest-services/someObject/1234/entries?term=hello

    对不起,Joseph.查询表怎么样?@BrianL.-看看我刚才添加的小提琴。JSFIDLE很棒,我不知道他们在runner中提供Firebug Lite。谢谢你分解正则表达式的解释。我去了back to docs and realized
    ^
    在字符集中有不同的含义。因为表达式匹配“任何非花括号的内容”,它如何知道从何处开始?@BrianL.-当
    ^
    出现在字符集的开头时,它的作用不同:它否定字符集。请参阅我上面添加的解释。@BrianL.-如果不进行前瞻,它也将匹配
    {
    之前的内容:
    var _serviceURL = "http://my-server.com/rest-services/someObject/{objectID}/entries?term={queryTerm}"
    
    var values = {
        objectID: 1234,
        queryTerm: "hello"
    }
    
    var result = _serviceURL.replace(/{(.+?)}/g, function($0, $1) {
        return values[$1]
    })