有没有一种简单的方法可以在另一个正则表达式文字中引用一个 Javascript 文字(例如“字符串”)?
有点熟悉 Javascript 正则表达式,但远非大师。尝试为少数表达式类型编写一个简单的解析器。例如,一种类型是如下表达式:
`value gender 1='Male' 2 ='Female' 3="Didn't answer" >3 = 'Other';
与其用 Jison 和随之而来的学习曲线编写一个完整的解析器,我认为使用 RegExp 会很简单。
似乎Javascript Regexp 无法捕获任意数量的重复子组,并且没有明确的字符可以拆分,我正在使用自己的正则表达式解析子组。
以下工作正常,但正则表达式文字远非 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
. 我可以这样写吗?
有没有一种简单的方法可以在另一个正则表达式文字中引用一个 Javascript 文字(例如“字符串”)? 通过修改字符串指定正则表达式可能会起作用,但也似乎很尴尬且容易出错(例如,需要转义引号和转义转义)。
或者这已经是为什么人们基于语法创建解析器并移出正则表达式的典型代表?