Javascript用模式拆分字符串

Javascript split the string with patterns

本文关键字:字符串 拆分 模式 Javascript      更新时间:2023-09-26

>String:

Q$: any character, number goes here.
A$: Answer goes here
C$: c,c1,c2,c3

我想要如下最终输出

  [Q$:=any character, number goes here.,
   A$:=Answer goes here,
   C$:=c,c1,c2,c3
  ]

如果有多个字符串,则数组应具有所有值。

例如:

String:
Q$: any character, number goes here.
A$: Answer goes here
C$: c,c1,c2,c3
Q$: any character, number goes here.A$: Answer goes here
C$: c,c1,c2,c3
Q$: any character, number goes here.    A$: Answer goes here
Q$: any character, number goes here.
A$: Answer goes here
C$: c,c1,c2

最终数组应将所有项目作为要验证的数组。

我试过了

$(function() {
  var y = Array();
  str = `Q$:ADD A GOOD QUESTION
A$:ANSWER
C$:choice0, choice1, choice2, choice2`;
  str.replace(/([ACQ]'$:['S]*)(.*)/gmi, function(match, p1, p2) {
    y.push([p1, p2]);
  });
  console.log(y);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我错过了一些东西。它在少数情况下有效。在少数情况下,它没有。任何将它们拆分的建议。

我所理解的,根据您的要求,并假设您的输出为有效的 JSON 对象,假设 Q$、A$、C$ 的顺序将始终相同,请尝试此代码

var str = "Your String"
//Add LineBreaks for making a valid format to make our search easier
var formattedOutput = str.replace(/[ACQ]'$/gm, function($0) {
    return "'n" + $0
})
//Split with all LineBreaks
var arr = formattedOutput.trim().split(/'n+/)
var res = [];
for(var i=0;i<arr.length;i++) {
    if(arr[i].indexOf("Q$") != -1) {
        res.push({
            "Q$":arr[i].trim().split(/Q'$:'s+/)[1]
        })
    } else {
        if(arr[i].indexOf("A$") != -1) {
console.log(arr[i].trim().split(/A'$:'s+/))
            res[res.length-1]["A$"] = arr[i].trim().split(/A'$:'s+/)[1]
        } else if(arr[i].indexOf("C$") != -1) {
            res[res.length-1]["C$"] = arr[i].trim().split(/C'$:'s+/)[1]
        }
    }
}
console.log(res)

var str = $("#test").val()
//Add LineBreaks for making a valid format to make our search easier
var formattedOutput = str.replace(/[ACQ]'$/gm, function($0) {
	return "'n" + $0
})
//Split with all LineBreaks
var arr = formattedOutput.trim().split(/'n+/)
var res = [];
for(var i=0;i<arr.length;i++) {
	if(arr[i].indexOf("Q$") != -1) {
		res.push({
			"Q$":arr[i].trim().split(/Q'$:'s+/)[1]
		})
	} else {
		if(arr[i].indexOf("A$") != -1) {
			res[res.length-1]["A$"] = arr[i].trim().split(/A'$:'s+/)[1]
		} else if(arr[i].indexOf("C$") != -1) {
			res[res.length-1]["C$"] = arr[i].trim().split(/C'$:'s+/)[1]
		}
	}
}
$("#output").html(JSON.stringify(res))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="test" rows="10" tabindex="3">
  Q$: any character, number goes here. A$: Answer goes here C$: c,c1,c2,c3 Q$: any character, number goes here.A$: Answer goes here C$: c,c1,c2,c3 Q$: any character, number goes here. A$: Answer goes here Q$: any character, number goes here. A$: Answer
  goes here C$: c,c1,c2
</textarea>
<div>
  <span id="output"></span>
</div>

工作小提琴