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

我可以通过在另一个Javascript Regexp文本中引用一个Javascript Regexp文本来避免代码重复吗?,javascript,regex,Javascript,Regex,有没有一种简单的方法可以在另一个regexp文本中引用一个Javascript文本(例如“string”) 有点熟悉Javascript Regexp,但远不是专家。尝试为少数表达式类型编写一个简单的解析器。例如,一种类型的表达式如下: `value gender 1='Male' 2 ='Female' 3="Didn't answer" >3 = 'Other'; 我认为使用RegExp足够简单,而不是用say、Jison和随之而来的学习曲线编写一个完整的解析器 看起来,并没有清晰

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

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

 `value gender 1='Male' 2 ='Female' 3="Didn't answer" >3 = 'Other';
我认为使用RegExp足够简单,而不是用say、Jison和随之而来的学习曲线编写一个完整的解析器

看起来,并没有清晰的字符可以拆分,我正在用它们自己的正则表达式解析子组

下面的代码可以正常工作,但是regexp文本还远没有干涸,几乎不可读。每个较高级别的构造重复较低级别的构造

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”)?通过mung字符串指定regexp可能会起作用,但看起来也很笨拙且容易出错(例如,需要转义引号和转义符)


或者这已经是为什么人们基于语法创建解析器并移出Regexp的典型例子了吗?

可能是重复的是,你是对的。我希望在另一个re中象征性地引用一个re。如果可以将其分为左表达式和右表达式,每个表达式本身都是有效的REs,那么这看起来是可以做到的。但是你无法定义RE并在另一个类似于元字符(例如.\s vs.\MyRegEx)的模式中引用它。子模式本身就是有效的RE。如果重用它们,我认为子模式是一个很好的粒度级别。