我应该使用什么RegEx来解析文本的各个部分?

hc2pp10m  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(122)

我正在尝试编写一个程序,将术语和定义列表转换为抽认卡,我的想法是使用RegEx以如下方式解析输入:

term(1)-def(1)
term(2)-def(2)
term(3)-def(3)
term(4)-def(4)
term(5)-def(5)

其解析为:

terms = ["term(1)","term(2)","term(3)","term(4)","term(5)"];
definitions = ["def(1)","def(2)","def(3)","def(4)","def(5)"];

我对RegEx语法非常陌生,所以我不确定我将如何准确地做到这一点。
其他背景:

  • 每行包含以下格式:term-definition\n
  • 我将用JavaScript编写这个程序,这样我就可以在网站上托管这个程序(是的,我知道我不需要使用JS。它只是最简单的设置)。
  • RegEx应该只避免第一个-,因为它可能出现在定义中。-永远不会出现在术语中。
z2acfund

z2acfund1#

您可以使用this question中描述的方法之一拆分输入,然后将结果推送到termsdefinitions数组或定义对象:

const inp = `term 1 - definition 1
term 2 - definition 2 - contains a hyphen
term 3 - def 3
term 4 - has - lots - of - hyphens`

const terms = []
const definitions = []
const defobj = {}

inp.split('\n').forEach(line => {
  [term, definition, _] = line.split(/\s*-\s*(.*)/)
  terms.push(term)
  definitions.push(definition)
  defobj[term] = definition
})

console.log(terms)
console.log(definitions)
console.log(defobj)
s8vozzvw

s8vozzvw2#

您可以将第一个-之前的所有内容捕获为术语,并将其后的所有内容捕获为定义:

const item = "term(1)-def(1)";

const rx = /([^-]+)-(.*)/;

const [, term, def] = rx.exec(item);

console.log(`term is "${term}"; def is "${def}"`);

但是为什么不使用JSON/objects作为输入呢?这样可以保存所有的麻烦,因为不需要字符串解析。
x一个一个一个一个x一个一个二个一个x一个一个三个一个

相关问题