在行的第一个等号上用正则表达式拆分

时间:2018-11-28 19:44:34

标签: javascript regex split

我有一个像这样的字符串:

en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah <a href="asdf">

我想按行首=进行拆分。我想得到以下结果:

['en.HelpPanel.Subtitle1', 'About', 'en.HelpPanel.SubText1a', 'Blah <a href="asdf">']

但是,我无法仅识别第一个=。我尝试过:

我正在尝试定义“没有其他等号前面的等号”,我尝试过:

str.split(/^.*?=/)

但这给出了:

Array [ "", "About\nen.HelpPanel.SubText1a=Blah <a href=\"asdf\">" ]

我尝试了多行标志,它给了我:

str.split(/^.*?=/m)


Array(3) [ "", "About\n", "Blah <a href=\"asdf\">" ]

4 个答案:

答案 0 :(得分:2)

如果要使用正则表达式,可以使用match代替split

str.match(/^.*?(?==)|[^=\n\r].*$/gm);

const str = `en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah <a href="asdf">`

const result = str.match(/^.*?(?==)|[^=\n\r].*$/gm);

console.log(result);

使用split,您可以这样做:

str.split(/=(.*)[\r\n]*/gm);

诀窍在于,正则表达式捕获组也将在输出中返回。但是此split将在末尾返回一个额外的空字符串,然后应将其排除。

const str = `en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah <a href="asdf">`

const result = str.split(/=(.*)[\r\n]*/gm);
result.pop(); // get rid of trailing empty string

console.log(result);

答案 1 :(得分:1)

您可以在.match中使用此正则表达式:

/^([^=]*)=(.*)/gm

从捕获的#1和#2组中抓取文本。

RegEx Demo

代码:

const regex = /^([^=]*)=(.*)/gm;
const str = `en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah <a href="asdf">`;
let m;
let result = [];

while ((m = regex.exec(str)) !== null) { 
    result.push(m[1], m[2]);  
}

console.log(result);
/*
[
  "en.HelpPanel.Subtitle1",
  "About",
  "en.HelpPanel.SubText1a",
  "Blah <a href=\"asdf\">"
]
*/

答案 2 :(得分:1)

您也可以使用splitArray.flatMap来实现这一目标。

请注意-到目前为止,flatMap不受所有浏览器的支持(例如Edge)

let str = `en.HelpPanel.Subtitle1=About 
en.HelpPanel.SubText1a=Blah <a href="asdf">`

console.log(str.split(/\n/).flatMap(d => ([a, ...b] = d.trim().split('='), [a, b.join('=')])))

答案 3 :(得分:1)

您可以使用换行符(?! split在换行符或等号上,而后跟双引号之间的内容不能后跟str.split(/=(?!"[^"]+")|\n

let str = `en.HelpPanel.Subtitle1=About en.HelpPanel.SubText1a=Blah <a href="asdf">`; console.log(str.split(/=(?!"[^"]+")|\n/));

HA!