为什么这个正则表达式不起作用,哪个符号更符合标准
Why doesn't this RegExp work and which notation is more standards compliant?
免责声明:我意识到问"为什么我的正则表达式不起作用"是非常业余的。
我已经查看了文档,尽管我只是在挣扎。 我有一个 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...")
}
上面的re6a
在执行时生成如下数组:
tokens: Array[3]
0: "{objectID}"
1: "{objectID}"
2: "objectID"
与上述场景相关:
- 为什么我从来没有得到
queryTerm
? - 正则表达式"i"(忽略大小写(标志是否意味着我可以列出像 [a-z] 这样的字符类并捕获 [A-Z]?
- 哪种构造正则表达式对象的方法更好?
...new RegExp(...);
或var regExp = /{([^}]+)}/g;
. 就"更好的东西"而言,我的意思是跨浏览器兼容性,并且类似于其他正则表达式实现(如果我正在学习正则表达式,我想从中获得最大的价值(。
正则表达式
i
(忽略大小写(标志是否意味着我可以列出像[a-z]
这样的字符类并捕获[A-Z]
?
是的,它会捕获它们。
哪种构造正则表达式对象的方法更好?
new RegExp(...)
还是var regExp = /{([^}]+)}/g;
?就"更好的东西"而言,我的意思是跨浏览器兼容性,并且类似于其他正则表达式实现(如果我正在学习正则表达式,我想从中获得最大的价值(。
您绝对应该使用文字表示法。
它在运行时编译一次,而不是每次使用它时。
它们都同样跨浏览器兼容。
综上所述,我会使用这个:
_serviceURL.match(/[^{}]+(?=})/g);
这是小提琴:http://jsfiddle.net/CAugU/
以下是上述正则表达式的解释:
[ 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
相关文章:
- 在.csv文件中写入学位符号
- 使用相同的数据集绘制各种符号
- 将带点符号的属性(有时)传递给函数
- RegEx JavaScript:数字后的符号提取
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 如何在计算器符号为零时替换它
- 如何允许web浏览器记住未以标准方式发送的表单字段
- 删除输入中输入的符号
- 如何在ReactJs中渲染重音符号
- 如何替换JavaScript字符串中除字母和数字之外的所有内容(空格/符号)
- 插入符号到底是什么
- 删除图形和数字之间的连字符(-)符号
- 浏览器intl.NumberFormat未正确显示货币符号
- JS toLocaleString始终显示货币符号,而不考虑区域设置
- 将插入符号位置移动到ContentEditable<DIV>
- 命名约定的Web标准
- 为更改的输入返回插入符号位置的逻辑
- 包含转义符号的正则表达式
- 为什么这个正则表达式不起作用,哪个符号更符合标准
- TinyMCE标准表情符号不显示在前端