Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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 如何进行动态反向字符串插值_Javascript_Regex_Interpolation - Fatal编程技术网

Javascript 如何进行动态反向字符串插值

Javascript 如何进行动态反向字符串插值,javascript,regex,interpolation,Javascript,Regex,Interpolation,下面是我为一些代码编写的测试: const transclude = '{fieldA}-{fieldB}-{fieldC}'; const val = { fieldA: 'one', fieldB: 'two', fieldC: 'three', }; const expected = 'one-two-three'; 应该是直截了当的,给定对象,我想将这些值插入transclude字符串并得到结果 现在我想到了一件很好的

下面是我为一些代码编写的测试:

    const transclude = '{fieldA}-{fieldB}-{fieldC}';
    const val = {
      fieldA: 'one',
      fieldB: 'two',
      fieldC: 'three',
    };
    const expected = 'one-two-three';
应该是直截了当的,给定对象,我想将这些值插入
transclude
字符串并得到结果

现在我想到了一件很好的事情,有可能倒退吗

    const transclude = '{fieldA}-{fieldB}-{fieldC}';
    const val = 'one-two-three';
    const expected = {
      fieldA: 'one',
      fieldB: 'two',
      fieldC: 'three',
    };
为了从好答案中剔除坏答案,以下几点也需要发挥作用:

    const transclude = '{fieldA}-{fieldB}-some-value-{fieldC}';
    const val = 'one-two-some-value-three';
    const expected = {
      fieldA: 'one',
      fieldB: 'two',
      fieldC: 'three',
    };

编辑:不得不说,我不知道为什么我在这个问题上投了一票——在我看来,我有一个非常明确的问题要解决?如果投票人认为我需要更多关注点,请发表评论并让我知道如何改进问题。

transclude
字符串转换为带有命名捕获组的正则表达式。匹配结果的
groups
属性将包含所需的对象

const transclude='{fieldA}-{fieldB}-一些值-{fieldC}';
const transRE=new RegExp(transclude.replace(/\{(.*?\}/g,(?.*));
const val=‘一、二、三’;
const result=val.match(transRE);

console.log(result.groups)您需要显示您的尝试。。你试过什么?如果你遇到了一个特定的问题,发布你的特定问题,但你不能指望任何人只为你编写代码。我相信你知道这一点。:)FWIW我认为它不应该关闭,我也不是DV,但在我看来,33k代表用户/JS金徽章持有者可以通过一点明智的谷歌搜索来处理这种事情(我的意思是点击3个链接,顶部)…我认为第三个示例中的
val
是错误的。它不应该是
1 2一些值3
?您基本上需要将
transclude
转换为带有捕获组的正则表达式,其中包含
{xxx}
。如果您使用命名捕获组,它将通过管道输出预期的结果。@Barmar抱歉,我的斜体字不够具体。“这似乎(重点改变)像是33k代表用户/JS金徽章持有者遇到的那种问题……”等等。动态生成regexp的难度更大,我不是一个优秀的regexer,但我肯定会尝试一下,而不是根据我对这个问题的原始反馈在这里寻求更多帮助。也许这是上面所有评论者认为很容易做到的困难部分——我需要动态生成regexp?这是另一个正则表达式。将
{(.*)}
替换为
(?*)
看看这个答案(显然是一个非常聪明和受人尊敬的用户)-这个解决方案是多么简单,怎么对所有的评论者来说都不是显而易见的呢?讽刺我不认为任何评论者暗示这会很容易。但是没有证据表明你尝试过,这是我们所期望的,一个高代表性的用户应该知道这一点。因为你说做插值很简单,他们认为你应该能够考虑如何做。