Javascript 为什么';这个RegExp是否有效?哪个符号更符合标准?
免责声明:我意识到问“为什么我的正则表达式不能工作”是相当业余的 我已经看过了,虽然我只是在挣扎。我有一个url(作为字符串),我想要的是替换占位符(即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-
{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(…);
或var RegExp=/{([^}]+)}/g;
。就“更好”而言,我的意思是跨浏览器兼容性,与其他RegEx实现类似(如果我在学习RegEx,我想从中获得最大的价值)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]
})