Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式拆分,在第行的第一个相等字符上_Javascript_Regex_Split - Fatal编程技术网

Javascript 使用正则表达式拆分,在第行的第一个相等字符上

Javascript 使用正则表达式拆分,在第行的第一个相等字符上,javascript,regex,split,Javascript,Regex,Split,我有这样一个字符串: en.HelpPanel.Subtitle1=About en.HelpPanel.SubText1a=Blah <a href="asdf"> 但是,我无法仅识别第一个=。我试过这个: str.split(/^.*?=/) 我试图定义“相等字符之前没有另一个相等字符”,我尝试了以下方法: str.split(/^.*?=/) 但这给了: Array [ "", "About\nen.HelpPanel.SubText1a=Blah <a href=

我有这样一个字符串:

en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah <a href="asdf">
但是,我无法仅识别第一个
=
。我试过这个:

str.split(/^.*?=/)
我试图定义“相等字符之前没有另一个相等字符”,我尝试了以下方法:

str.split(/^.*?=/)
但这给了:

Array [ "", "About\nen.HelpPanel.SubText1a=Blah <a href=\"asdf\">" ]
Array[“”,“关于\n.HelpPanel.SubText1a=Blah”]
我尝试了多行标志,它给了我这个:

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


Array(3) [ "", "About\n", "Blah <a href=\"asdf\">" ]
str.split(/^.*?=/m)
数组(3)[“”、“关于”\n、“诸如此类”]

如果要使用正则表达式,可以使用
match
而不是
split

str.match(/^.*?(?==)|[^=\n\r].*$/gm);
const str=`en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah`
const result=str.match(/^.*(?==)|[^=\n\r].$/gm);

控制台日志(结果)
您可以在
.match
中使用此正则表达式:

/^([^=]*)=(.*)/gm
并从捕获的组#1和#2中获取文本

代码:

const regex=/^([^=]*)=(.*)/gm;
const str=`en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah`;
让m;
让结果=[];
而((m=regex.exec(str))!==null){
结果:push(m[1],m[2]);
}
控制台日志(结果);
/*
[
“恩.帮助面板.字幕1”,
“关于”,
“en.HelpPanel.SubText1a”,
“废话”
]

*/
您也可以使用
split
Array.flatMap
来实现这一点

请注意-
flatMap
目前并非所有浏览器都支持(例如Edge)

let str=`en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah`
console.log(str.split(/\n/).flatMap(d=>([a,…b]=d.trim().split('='),[a,b.join('='))))
您可以使用一个换行符或等号,该换行符后面不跟双引号之间的内容,使用负前瞻
(?!

str.split(/=(?!“[^”]+”)\n

let str=`en.HelpPanel.Subtitle1=About
en.HelpPanel.SubText1a=Blah`;

console.log(str.split(/=(?!“[^”]+”)\n/)
谢谢这是一个很酷的解决问题的方法!我正在尝试学习拆分正则表达式,如果可能的话。添加了一个基于拆分的解决方案,但是它需要一个额外的
pop
。谢谢!!这对我来说是一个很有教育意义的帖子!谢谢,但我只是尝试使用正则表达式一行程序来学习.但是+1谢谢!这对我来说是一个非常有教育意义的帖子!我已经接受了另一个解决方案,但这是非常有用的谢谢!+1