【发布时间】:2021-08-19 16:18:24
【问题描述】:
在 JS 中,我试图从下面的代码构建一个对象。但是,我坚持使用以下替换功能获取正则表达式命名组。
var formatters = {
'p': 'padding',
'm': 'margin',
'd': 'border', // Had to use letter "d", Becuase "b" means "bottom".
't': '-top',
'b': '-bottom',
'l': '-left',
'r': '-right'
}
var str = 'p:[p], pt:[p][t], pb:[p][b], rounded-tr:[d][t][r]-radius'
var match = str.replace(/:(?<selection>.*?)(:?,)/g, (m) => formatters[m])
// var expectedOutput = {'p':'padding', 'pt':'padding-top', 'pb':'padding-bottom', 'rounded-tr': 'border-top-right-radius'}
注意:我要做的是,从 str 变量中选择字符,从 ":" 到 "," 并将其替换为 formatters 值。然后把字符串变成一个对象。
【问题讨论】:
-
映射推定键的逻辑不明确。你怎么知道
'rounded-tr'中的首字母(或尾随的)'r'不应该转换为'-right'? -
如何使用 replace() 将
expectedOutput作为对象? -
叶夫根:啊,这是个问题。也许将每个可替换字符包装在 '[ ]' 中?像这样:
rounded-tr:[d][t][r]-radius? -
@stackminu: 不是很优雅,但这可能会起作用(如果你不应该在输出中既没有
'[',也没有']',并且你完全可以控制传入的内容作为str)。 -
User863:这很简单,可以使用
map和join。在弄清楚正则表达式部分后将进行演示。
标签: javascript php css arrays regex