【问题标题】:regex camelize particular text inside string正则表达式骆驼化字符串内的特定文本
【发布时间】:2018-01-25 04:34:40
【问题描述】:

我有一个下一个字符串:

  $scope.string = "User {{User Firstname}} </p><p>System {{Reported System Name}} </p><p>Desc {{Description}}</p><ol></ol>"

我正在努力实现下一个结果:

 $scope.string = "User {{userFirstname}} </p><p>System {{reportedSystemName}} </p><p>Desc {{description}}</p><ol></ol>"

在正则表达式的帮助下,我可以找到骆驼化文本的必要条件

if ($scope.string.match(/\{\{(.*?)\}\}/g)){
       for (var i = 0; i < $scope.string.match(/\{\{(.*?)\}\}/g).length; i ++){
             $scope.string.match(/\{\{(.*?)\}\}/g)[i] = camelizeBrackets($scope.string.match(/\{\{(.*?)\}\}/g)[i])
        }
  }

但是我发现 here 并修改为使用花括号内的文本的函数 camelizeBrackets 根本不起作用

 function camelizeBrackets(str) {
     return str.replace(/\{\{(?:^\w|[A-Z]|\b\w|\s+)\}\}/g, function(match, index) {
        if (+match === 0) return "";
          return index === 0 ? match.toLowerCase() : match.toUpperCase();
       });
   }

谁能解释我做错了什么?

My plunker

【问题讨论】:

  • 要解释你做错了什么,需要解释你想要做什么你想要做什么的正则表达式。这部分正则表达式 (?:^\w|[A-Z]|\b\w|\s+) 无法解释任何事情,因为它无法识别。那么,有更好的解释吗?
  • @sln 我更新了我的问题,如果您需要更多解释,请告诉我
  • 所以你试图删除空格,降低第一个单词的第一个字母,高于第二个,第三个,..单词字母?第一个字母之后的字母呢,降低它们?
  • String.match 返回一个匹配数组,但将该数组的元素设置为新元素不会影响原始字符串。你会想做 $scope.string = $scope.string.replace(some regex, some replacement function);见String.replace

标签: javascript angularjs regex


【解决方案1】:

您可以分两步完成,获取内括号内容,然后将其骆驼化。

(注意 - 你可以将 not-word \W 替换为空格 \s 如果你只是
想删除空格)

解释

    ^ \W* 
    ( \w )                        # (1), First letter of first word
 |                          # or,
    \b 
    ( \w )                        # (2), First letter of other words
 |                          # or,  
    ( \W )                        # (3), Non-words, whitespace, etc...

function camelize(str)
{
   return str.replace( /^\W*(\w)|\b(\w)|(\W)/g,
      function(match, g1,g2,g3) {
          if ( g1 != null )    // first word, first letter
             return g1.toLowerCase();
          else
          if ( g2 != null )    // second word's, first letter
             return g2.toUpperCase();

          return '';           // all non-word letters( wsp )
      }
   )
}

function camelizeBrackets(str)
{
   return str.replace(/\{\{([\S\s]*?)\}\}/g,
      function(match, g1) {
         return '{{' + camelize( g1 ) + '}}';
        }
      );
} 

console.log( camelizeBrackets("{{EquipmentClass name}}") );
console.log( camelizeBrackets("{{Equipment className}}") );
console.log( camelizeBrackets("{{equipment class name}}") );
console.log( camelizeBrackets("{{Equipment Class Name}}") );

console.log( camelizeBrackets("User {{User Firstname}} </p><p>System {{Reported System Name}} </p><p>Desc {{Description}}</p><ol></ol>") );

全部输出{{equipmentClassName}}


User {{userFirstname}} &lt;/p&gt;&lt;p&gt;System {{reportedSystemName}} &lt;/p&gt;&lt;p&gt;Desc {{description}}&lt;/p&gt;&lt;ol&gt;&lt;/ol&gt;
在末尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多