【问题标题】:regex match starts and ends with expression using angular正则表达式匹配以使用角度的表达式开始和结束
【发布时间】:2020-04-03 15:12:30
【问题描述】:

我在这里有我的工作示例

https://stackblitz.com/edit/angular-fk2vpr?embed=1&file=src/app/app.component.ts

我在这里写了条件,例如单词是否以 { 和 } 开头和结尾,它们需要以可编辑的方式突出显示。在这里,对于没有像 {username} 这样的空格的单词,它的工作正常,但在 {host} 的情况下,它不会将该单词突出显示,如果像 {pas} 这样的单词也是如此!

然后{pas}这个词需要单独突出显示,但它伴随着它!

谁能帮助我在这种情况下犯了什么错误

提前致谢

【问题讨论】:

    标签: javascript regex angular angular7


    【解决方案1】:

    用下面的代码试试就行了。

     const editable = data.match(/{+.*?}+/gi);
      if(editable){
        editable.map(word => {
          const re= new RegExp(word,'g');
          data = data.replace(re,' '+ word.replace(/\s/gi,'')+' ')
        })
      }
    

    根据上面的代码令牌 {username}!!将无法工作,因为我们正在与空间分开。为了解决这个问题,我们可以在该标记之前和之后添加额外的空间。使用下面的行在所有条件下工作。

    data = data.replace(word, ' ' + word.replace(/\s/g,'') + ' ')
    

    【讨论】:

    • 是否可以在匹配中添加另一个条件,例如 { 和 }(或){{ }},因为即使带有 {{}} 的单词也显示为 {
    • 还有一个问题,替换仅针对第一次出现而不是下一次出现。参考stackblitz.com/edit/angular-fk2vpr?embed=1&file=src/app/…
    • 在匹配方法中使用这个正则表达式 /{+.*?}+/gi。 g 用于返回所有匹配项,而不仅仅是第一个匹配项。您能否分享第一个问题的堆栈闪电战,因为我不清楚。
    • 在我之前的评论中,我已经与我的问题分享了正在工作的 stackblitz,你能检查一下吗
    • 在前面的评论 stackblitz 中,它只第一次出现,它使用带有 /gi 选项的正则表达式来解决。还有其他问题吗?
    【解决方案2】:

    问题在于映射data.split(' ')。请注意,当您在字符串 username { username} scrypt secret {password} 上调用它时,您不会得到一个包含 5 个元素的数组,如您所愿(即 ['username', '{ username}', 'scrypt', 'secret', '{password}']),但它会在 每个 空格字符上拆分;所以结果数组看起来更像这样:

    [
      'username',   '',
      '{',          '',
      '',           'username}',
      'scrypt',     'secret',
      '{password}'
    ]
    

    如果可以的话,我建议将 arr 数组作为数组数组,每个子数组都包含您想要通过其启动正则表达式的单词。但是,如果这不是一个选项,我建议不要那样拆分,而是像这样映射:

    this.mappedArr = this.arr.map(data => {
        const editable = data.match('([{].*?[}])');
        console.log(editable);
        return {
          editable,
          data: !editable ? 
                data :
                data.match(/(\{+ *)?\w+( *\}+)?/g).map(word => ({word, editable: word.match('^[{].*?[}]$')})) <
        };
    })
    

    虽然这需要重构,但它应该可以作为紧急修复。

    【讨论】:

    • 嗨大卫我试过这样,我可以知道如何为匹配添加另一个条件,如 { 或 {{ 以及在某些情况下,如果特定元素有多个单词这个条件 { { kavya babu }} 没申请几句话。这意味着 {} 之间的空间然后它不被考虑。stackblitz.com/edit/angular-fk2vpr?embed=1&file=src/app/…
    • 呃,是的,现在我注意到这种方法有缺陷。我已经更新了答案中的正则表达式,以考虑到许多括号(一个接一个)。多个单词虽然可能是可能的,但超出了我的能力。抱歉,我不是正则表达式专家。在我看来,如果没有事先输入验证,这是一项艰巨的任务。查看下面 Pujan 的答案,我认为它可能更有希望。
    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2012-04-14
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多