我有一个像这样的字符串:
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\">" ]
答案 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组中抓取文本。
代码:
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)
您也可以使用split
和Array.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!