javascript-在不丢失分隔符的情况下拆分
可能重复:javascript-在不丢失分隔符的情况下拆分,javascript,arrays,split,Javascript,Arrays,Split,可能重复: 我有一个字符串: "<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>" “abcdefgabcdefgabcdefgabcdefg” 我想将“abcdefg”的所有实例分成如下数组: ["<foo>abcdefg</bar>", "<foo>abcdef
我有一个字符串:
"<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>"
“abcdefgabcdefgabcdefgabcdefg”
我想将“abcdefg”的所有实例分成如下数组:
["<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>", "<foo>abcdefg</bar>"];
[“abcdefg”、“abcdefg”、“abcdefg”、“abcdefg”];
我尝试:
var str="<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>";
var Array_Of_FooBars = str.split("</bar>");
alert(Array_Of_FooBars);
var str=“abcdefgabcdefgabcdefg”;
变量数组_Of_FooBars=str.split(“”);
警报(一个或多个工具栏的数组);
但它的回报是:
["<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg", "<foo>abcdefg",]
[“abcdefg”、“abcdefg”、“abcdefg”、“abcdefg”,]
它正在删除分隔符“”。我不想那样
如何使用split而不丢失字符串中的分隔符
谢谢。
Ken使用,以便正则表达式断言特殊字符存在,但实际不匹配:
string.split(/<br \/>(?=&#?[a-zA-Z0-9]+;)/g);
string.split(/
(?=?[a-zA-Z0-9]+)/g);
试试这个。这不是一个完美的解决方案,但在大多数情况下都应该有效
str.split(/(?=<foo>)/)
您只需迭代一个简单的正则表达式,然后以这种方式构建数组:
var x = new RegExp('<foo>(.*?)</bar>', 'ig'),
s = "<foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar><foo>abcdefg</bar>",
matches = [];
while (i = x.exec(s)) {
matches.push(i[0]);
}
var x=new RegExp(“(.*?”,“ig”),
s=“abcdefgabcdefgabcdefg”,
匹配项=[];
而(i=x.exec){
matches.push(i[0]);
}
刚刚意识到使用
String.match()
会更好;此代码对于匹配标记内的内容更为有用。似乎您最希望使用match:
var s = "<foo>abcd1efg</bar><foo>abc2defg</bar><foo>abc3defg</bar><foo>abc4defg</bar>"
s.match(/(<foo>.+?<\/bar>)/g)
// =>["<foo>abcd1efg</bar>", "<foo>abc2defg</bar>", "<foo>abc3defg</bar>", "<foo>abc4defg</bar>"]
var s=“abcd1efgabc2defgabc3defgabc4defg”
s、 匹配(/(.+?)/g)
//=>[“abcd1efg”、“abc2defg”、“abc3defg”、“abc4defg”]
您有一个XML/HMTL元素字符串,如abcdefg
?我不这么认为。(翻译:当你编出你要问的代码时,这确实会适得其反。此外,你的问题是:“我想在Y上做X,以得到Z。”实际上应该是“我有Y,想要Z,我该怎么做?”——split()
不是唯一可能的解决方案。)谢谢Tomalak-非常有帮助-如果你不知道答案-为什么要为你的否定回答而烦恼?@kdawg:你的标签错了,这很有帮助…为什么不修复它?问题是-如何使用split而不丢失分隔符。好的-听起来不错。在你的例子中,我应该把“”分隔符放在哪里?我明白了,我删除了+1的答案。非常好的Namida Aneskans-正是我要问的。非常感谢你,伙计:)很高兴知道“.match()方法也可以工作。再次感谢Namida Aneskans:)我想我喜欢这场比赛——因为似乎会有更少的出错空间——在一端和另一端匹配所有内容,并抓住中间的所有内容?你怎么认为?
var s = "<foo>abcd1efg</bar><foo>abc2defg</bar><foo>abc3defg</bar><foo>abc4defg</bar>"
s.match(/(<foo>.+?<\/bar>)/g)
// =>["<foo>abcd1efg</bar>", "<foo>abc2defg</bar>", "<foo>abc3defg</bar>", "<foo>abc4defg</bar>"]