我可以通过在另一个内部引用一个Javascript Regexp文字来避免代码重复吗?

时间:2012-09-27 18:30:52

标签: javascript regex

是否有一种简单的方法可以在另一个regexp文字中引用一个Javascript文字(例如“string”)?

有点熟悉Javascript Regexp但远非大师。尝试为少数表达式类型编写一个简单的解析器。例如。一种类型是表达式:

 `value gender 1='Male' 2 ='Female' 3="Didn't answer" >3 = 'Other';

我认为使用RegExp可以很简单,而不是写一个完整的解析器,比如说Jison和随之而来的学习曲线。

它显示为Javascript Regexp can't capture an arbitrary number of repeating subgroups,并且没有明确的字符可以拆分,我正在使用自己的正则表达式解析子组。

以下工作正常,但正则表达式文字远离DRY,但几乎不可读。每个更高级别的构建体重复较低级别的构建体。

var re_value_stmt = /value\s+(\w+)((?:\s+(?:[^=]+[=](?:(?:["][^"]+["])|(?:['][^']+[']))))+)/i
var re_value_clause = /([^=]+[=](\s*(?:(['][^']*['])|(["][^"]*["])))+)/ig
var re_value_elems =   /([^=]+)[=]\s*(?:(?:[']([^']*)['])|(?:["]([^"]*)["]))/ig

console.log(re_value_elems.exec("1='Male'"));
console.log(re_value_clause.exec("1=\"Male\" 2=\"Female\""));
console.log(re_value_stmt.exec("value gender 1='Male' 2='Female'"));

例如,(?:(?:["][^"]+["])|(?:['][^']+[']))仅表示QuotedString。我可以这样写吗?

是否有一种简单的方法可以在另一个regexp文字中引用一个Javascript文字(例如“string”)?通过修改字符串来指定regexp可能会起作用,但也看起来很笨拙且容易出错(例如需要逃避引号和逃脱逃逸)。

或者这已经成为人们为什么会根据语法创建解析器并退出Regexp的典型代表?

0 个答案:

没有答案
相关问题