如何使用正则表达式解析OCC选项符号?

时间:2017-06-07 02:09:50

标签: javascript regex

OCC选项符号由4部分组成:

  1. 基础股票或ETF的根符号,填充空格为6个字符
  2. 到期日期,格式为yymmdd的6位数字
  3. 选项类型,P或C,用于投放或致电
  4. 行价,价格为x 1000,正面填充0到8位
  5. 例如SPX 141122P00019500表示a put on SPX, expiring on 11/22/2014, with a strike price of $19.50.

    是否可以使用正则表达式自动解析?我正在使用JavaScript

3 个答案:

答案 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匹配字符串开头不是空格字符的字符,或将日期显示为接下来的六位数后跟CP,或者CP后跟一个或多个0字符,或一个或多个0字符,前面有CP,或者一个或字符串末尾的更多数字。

利用破坏分配来定义数组中单独变量的匹配部分。



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});