在对象键中使用正则表达式子模式(使用.replace())
Using Regex Subpatterns in Object Keys (using .replace())
我对。replace()的工作方式有一个疑问
我知道我们可以像这样在替换文本中使用子模式
var somestr="foobar";
var newstr = somestr.replace(/foo([a-zA-Z]*)/g,"bar$1")
alert(newstr) //"barbar"
然而,我想知道是否有可能在对象属性中使用子模式,就像这样。
var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, someobj["$1"])
alert(newstr) //"fuu" ?
我的预期结果是得到someobj
的'bar'
性质,即"fuu"
,然而实际结果是undefined
,这将使我相信这是不可能的。
我怎样才能完成类似的功能呢?也许你们中的一个JS大师可以解释一下这个问题。
这背后的真实目的是我有一个模板系统,它使用短标签来显示来自请求的JSON对象的数据块,我试图简化谁的代码。
不像这样,我添加了$1来显示失败:
var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf', $1: 'test'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, someobj["$1"])
newstr; // "test";
但是这个也可以:
var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf', $1: 'test'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, "$1")
someobj[newstr]; // fuu
或者更好,replace接受一个函数:
var somestr = "foobar";
var someobj = {bar:'fuu',two:'uuf', $1: 'test'}
var newstr = somestr.replace(/foo([a-zA-Z]*)/g, function () {
return someobj[arguments[1]];
})
newstr; // fuu
你可以这样做:
var someString = "foobar";
var someObject= {bar:'fuu',two:'uuf'};
var re = /foo([a-zA-Z]*)/g;
if (re.test(someString)) {
alert(someObject[RegExp.$1]);
}
看这里的小提琴,http://jsfiddle.net/nickyt/AjjjP
你也可以这样做alert(someObject[someString.replace(/foo([a-zA-Z]*)/g, "$1")]);
,但问题是,如果$1中没有找到任何东西,你的对象会寻找一个空字符串键。我将继续使用上面的内容
相关文章:
- 从Regex模式获取子字符串
- 获取非标准模式中的子字符串
- 具有 UI 引导模式窗口的父$scope子
- 如何在字符串上组合JS replace()方法中的3个正则表达式模式
- 带有可选子字符串的JavaScript RegEx模式
- 如何在使用模块模式时使用 JSDoc 记录子命名空间
- 将 CodeMirror 子字符串设置为粗体而不更改模式
- 字符串正则表达式模式.replace(/{0}/, “$0.00”) 不起作用
- 正则表达式查找模式,返回子模式
- 不包括子模式的正则表达式
- Meteor.js&Collection2:更新在子模式中插入新对象的方法
- JavaScript正则表达式跳过子模式
- 英特尔Mac上的Javascript Regex.是模式和子模式替换bug
- 在父猫模式的数组中删除子模式中的单个行
- 子模式的正则表达式
- JavaScript和正则表达式:获取带括号的子模式的数量
- Javascript match:只返回子模式匹配的内容
- 当子模式弹出窗口关闭时,刷新父页面的一个部分
- 自动设置Mongoose子模式的默认值
- RegExp子模式重用用于不同的开闭条件