是否有一种简单的方法可以在另一个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的典型代表?