【问题标题】:Javascript regex to convert ruby hash syntax from 1.8 to 1.9Javascript 正则表达式将 ruby​​ 哈希语法从 1.8 转换为 1.9
【发布时间】:2014-10-22 12:55:47
【问题描述】:

您好,我正在尝试使用带有正则表达式的 AngularJS 从旧的 1.8 样式转换 Ruby 哈希

{ :name => "james" }

到更新的 1.9 语法

{ name: 'james' }

我正在尝试在 Angular JS 中执行此操作

以下片段

 $scope.$watch("rubyText", function( newValue ) {
   var newVal= newValue.replace(
      new RegExp( "([\w\d_]+)(\s*)=>/\1:", "g" ),
      newValue
   );
   $scope.rubyTextConverted = newVal;   
 }

我的 JS 正则表达式经验有限,想要一些关于正则表达式的建议

谢谢

【问题讨论】:

  • 这里到底发生了什么?您是否需要将 JavaScript 字符串中的一些 some_ruby_hash.inspect 输出转换为 JavaScript 数据结构?
  • 我经常将旧语法转换为新语法,并想做一个快速的工具来转换它,我可以在互联网上托管使用
  • 所以我希望能够复制我的哈希(从我的代码或任何地方)并将其粘贴到将转换语法的网站
  • 这是一个可能有帮助的链接。 coderwall.com/p/8zmazq

标签: javascript ruby-on-rails ruby regex angularjs


【解决方案1】:

可能必须考虑一些边缘情况,例如格式、空白等(除非先通过 ruby​​ 清除)。但是要让您从这里开始是一个非常基本的版本。您必须添加对数组、数字和下划线的支持。 { key: [] }

var regex = /:(\w*)\s?(=>)\s?("\w*")/gi;
var string = '{ :name => "james", :lastname => "rogers" }';

string.replace(regex, "$1: $3");
 //=> '{ name: "james", lastname: "rogers" }'

阅读正则表达式中的反向引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references

【讨论】:

  • 谢谢{ :a => "b", :b => [ :test => true ], :c => 12 } 是我正在努力的工作
  • 这就是我所拥有的——但不能 100% 工作var regex = /([^\:])\:([a-zA-Z_0-9]+[\?\!]?)(\s*)=\>(\s*)/;
猜你喜欢
  • 2011-07-15
  • 2012-03-30
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多