【发布时间】:2018-03-24 14:22:00
【问题描述】:
给定
class MyClass {
constructor () {
this.hello = 'greetings';
}
}
如果不启动class,我们如何确定this.hello 是否应该是JavaScript 类型之一,例如String、Array、Boolean?
为了调查的目的,我们不关心程序的实用性,而是关心程序在多大程度上是可能的和可验证的。
例如
let c = MyClass.toString().match(/constructor\s\(?.+\)\s\{?\n.+\n.+\}/);
c[0].match(/this\.\w+?\s=?\s.*(?:;)/);
我们可以得到this.hello = 'greeting';,接下来的步骤是确定'greeting'应该是或将是一个字符串?
使用RegExp 或String 方法来实现需求有什么问题?
澄清要求:
给定任意 JavaScript 类,确定其构造函数中使用的参数类型。
【问题讨论】:
-
使用解析器,解析源代码。不要使用正则表达式来做任何事情。
-
似乎不是一个可行的方法。例如。
this.hello = 'greetings hi howdy'.split()意味着hello是Array,但要正确处理,您的正则表达式必须能够解释String.prototype.split返回的内容。 IMO,使用完整的解析器/ AST 比使用正则表达式更幸运。 -
@Tomalak 你能在答案中发表你的观察和建议吗?
-
这是为了锻炼和好奇,还是无法实例化类的原因是什么?
-
@KevBot 这源于a discussion是否实际上可以通过正则表达式解析Javascript,而后者又源于another question,这并不真正相关。不,没有人知道为什么这个类最初不能被实例化。 ;)
标签: javascript regex string parsing types