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