【问题标题】:Empty value check by Regular Expression通过正则表达式检查空值
【发布时间】:2019-06-11 02:14:08
【问题描述】:

我有一个如下格式的字符串。

var commandString = 'Campaign: {campaign value} Group: {group value} Sort_By: {sort by value}'

我有以下两个问题

  1. var commandString = 'Campaign: {campaign value} Group: {group value} Sort_By: {}' 的输出是什么如果像 Sort_By 这样的值为空

  2. var commandString = 'Group: {group value} Sort_By: {sort by value}' 的输出是什么如果像 Campaign 这样的值为空当第一个值为空时,则需要为第二个值(如 Group)删除空间。

我没有找到任何想法,你能帮帮我吗。

【问题讨论】:

    标签: javascript regex typescript


    【解决方案1】:

    你可以使用这个正则表达式

    (?:^|\s)[a-z_]+?:\s*\{\s*\}
    
    • (?:^|\s) - 字符串或空格字符的开头
    • [a-z_]+? - 匹配字母和_一次或多次
    • : - 匹配 :
    • \s*\{\s*\} - 匹配 {}

    var str = 'Campaign: {campaign value} Group: {group value} Sort_By: {sort by value}'
    
    
    let removeEmpty = (str) =>{
      return str.replace(/(?:^|\s)[a-z_]+?:\s*\{\s*\}/gi,"").trim()
    }
    
    console.log(removeEmpty(str))
    console.log(removeEmpty("Campaign: {campaign value} Group: {}"))
    console.log(removeEmpty("Campaign: {} Group: {}"))

    【讨论】:

    • 干净利落的解决方案,谢谢
    【解决方案2】:

    我们会设计可选组以涵盖可能或潜在的选项,例如,我们可以从类似于以下的表达式开始:

    (Campaign:(\s+)?{(.+)?})?(\s+)?Group:(\s+)?{(.+)?}(\s+)?Sort_By:(\s+)?{(.+)?}
    

    Demo 1

    const regex = /(Campaign:(\s+)?{(.+)?})?(\s+)?Group:(\s+)?{(.+)?}(\s+)?Sort_By:(\s+)?{(.+)?}/gm;
    const str = `Campaign: {campaign value} Group: {group value} Sort_By: {sort by value}
    Campaign: {campaign value} Group: {group value} Sort_By: {}
    Group: {group value} Sort_By: {sort by value}
    
    Campaign: {campaign value}    Group:   {group value}    Sort_By: {sort by value}
    Campaign: {campaign value} Group:   {group value}   Sort_By: {}
    Group:   {group value} Sort_By:   {sort by value}`;
    let m;
    
    while ((m = regex.exec(str)) !== null) {
        // This is necessary to avoid infinite loops with zero-width matches
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }
        
        // The result can be accessed through the `m`-variable.
        m.forEach((match, groupIndex) => {
            console.log(`Found match, group ${groupIndex}: ${match}`);
        });
    }

    我们可以在我们希望有时拥有它的那些组的末尾使用?简单地添加更多可选空格,我们的表达式扩展为:

    (Campaign(\s+)?:(\s+)?{(.+)?})?(\s+)?Group(\s+)?:(\s+)?{(.+)?}(\s+)?Sort_By(\s+)?:(\s+)?{(.+)?}
    

    Demo 2

    const regex = /(Campaign(\s+)?:(\s+)?{(.+)?})?(\s+)?Group(\s+)?:(\s+)?{(.+)?}(\s+)?Sort_By(\s+)?:(\s+)?{(.+)?}/gm;
    const str = `Campaign: {campaign value} Group: {group value} Sort_By: {sort by value}
    Campaign: {campaign value} Group: {group value} Sort_By: {}
    Group: {group value} Sort_By: {sort by value}
    
    Campaign: {campaign value}    Group:   {group value}    Sort_By: {sort by value}
    Campaign: {campaign value} Group:   {group value}   Sort_By: {}
    Group:   {group value} Sort_By:   {sort by value}
    
    Campaign   :    {campaign value}    Group:   {group value}    Sort_By: {sort by value}
    Campaign  : {campaign value} Group:   {group value}   Sort_By    : {}
    Group    :   {group value} Sort_By    :   {sort by value}`;
    let m;
    
    while ((m = regex.exec(str)) !== null) {
        // This is necessary to avoid infinite loops with zero-width matches
        if (m.index === regex.lastIndex) {
            regex.lastIndex++;
        }
        
        // The result can be accessed through the `m`-variable.
        m.forEach((match, groupIndex) => {
            console.log(`Found match, group ${groupIndex}: ${match}`);
        });
    }

    正则表达式电路

    jex.im 可视化正则表达式:

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2012-04-14
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多