OCC选项符号由4部分组成:
例如SPX 141122P00019500
表示a put on SPX, expiring on 11/22/2014, with a strike price of $19.50.
是否可以使用正则表达式自动解析?我正在使用JavaScript
答案 0 :(得分:2)
这是正则表达式(我强烈推荐http://regexr.com)
([\w ]{6})((\d{2})(\d{2})(\d{2}))([PC])(\d{8})
第1组:ETF
第2组:年度
组3:月
第4组:日
Group5:put / call
第6组:执行价格
你的js看起来像这样(有些伪代码。没有经过测试)
var myString = "SPX 141122P00019500";
var myRegexp = /([\w ]{6})((\d{2})(\d{2})(\d{2}))([PC])(\d{8})/g;
var match = myRegexp.exec(myString);
console.log("a " + match[5] + " on " + match[1].trim() + ", expiring on " + match[3] + "/" + match[4] + "/20" + match[2] + " with a strike price of $" + match[6]);
答案 1 :(得分:1)
假设OCC选项字符串具有固定格式,我认为您甚至不需要正则表达式。相反,您可以尝试使用substring()
来提取各种组件。
var occ = 'SPX 141122P00019500';
var symbol = occ.substring(0, 3);
var year = parseInt(occ.substring(6, 8)) + 2000;
var month = occ.substring(8, 10);
var day = occ.substring(10, 12);
var date = month + '/' + day + '/' + year;
var type = occ.substring(12, 13) == 'P' ? 'put' : 'call';
var price = parseFloat(occ.substring(13, 21)) / 1000.0;
var output = 'a ' + type + ' on ' + symbol + ', expiring on ' + date +
', with a strike price of $' + price.toFixed(2); + '.';
console.log(output);
我希望使用substring来构建输出字符串通常比使用正则表达式更好。
答案 2 :(得分:1)
您可以使用RegExp
/^[^\s]+(?=\s+|\d{6})|\d{6}(?=C|P)|(C|P)(?=0+)|(?!:\1)0+|\d+$/g
匹配字符串开头不是空格字符的字符,或将日期显示为接下来的六位数后跟C
或P
,或者C
或P
后跟一个或多个0
字符,或一个或多个0
字符,前面有C
或P
,或者一个或字符串末尾的更多数字。
利用破坏分配来定义数组中单独变量的匹配部分。
let quote = "SPX 141122P00019500";
let re = /^[^\s]+(?=\s+|\d{6})|\d{6}(?=C|P)|(C|P)(?=0+)|(?!:\1)0+|\d+$/g;
let [ticker, date, option, strike, price] = quote.match(re);
console.log({ticker, date, option, strike, price});