[英]How to extract multiple strings from between special characters
我在定義正確的正則表達式時遇到問題。
我需要將文本分成組,這樣我將有一組位於大括號內的數字組/一組位於這些大括號之間的文本組/數組。
示例文本:
{3} Lorem ipsum "dolor" sat amet,{2} consectetur adipiscing elit。 {5}Sed semper; sollicitudin diam,“posuere”{3}aliquet massa pulvinar nec。
我想要兩個 arrays:
- [3,2,5,3]
- ["Lorem ipsum "dolor" sit amet", "consectetur adipiscing elit.", "Sed semper; sollicitudin diam, "posuere"", "aliquet massa pulvinar nec."]
幾乎我做到了,但我對文本中的特殊字符有疑問(輸入文本中禁止使用大括號字符)。 我現在的正則表達式:
\{(.)\}+([\d\w\s]+)
它返回:
- [“{3} Lorem ipsum”、“{2} consectetur adipiscing elit”、“{5}Sed semper”、“{3}aliquet massa pulvinar nec”]
我知道以后我可以在每個數組元素上使用.split('}') substring 等從文本中拆分數字(它不會很好,但它會起作用)。
String.prototype.matchAll()
返回所有匹配項及其捕獲組的迭代器,然后您可以使用它來填充單獨的 arrays。
const s = `{3} Lorem ipsum "dolor" sit amet, {2} consectetur adipiscing elit. {5}Sed semper; sollicitudin diam, "posuere" {3}aliquet massa pulvinar nec.` const reg = /\{(\d+)\}(.*?)(?=\{|$)/g; const matches = s.matchAll(reg); const braces = [], text = []; for (const match of matches) { const [_, b, t] = match; braces.push(b); text.push(t); } console.log(braces); console.log(text);
或映射到您選擇的形狀的數組。
const s = `{3} Lorem ipsum "dolor" sit amet, {2} consectetur adipiscing elit. {5}Sed semper; sollicitudin diam, "posuere" {3}aliquet massa pulvinar nec.` const reg = /\{(\d+)\}(.*?)(?=\{|$)/g; const matches = Array.from(s.matchAll(reg), ([_, digit, text]) => ({digit, text})); console.log(matches);
這會做到:
var text = `{3} Lorem ipsum "dolor" sit amet, {2} consectetur adipiscing elit. {5}Sed semper; sollicitudin diam, "posuere" {3}aliquet massa pulvinar nec.`; // regex for all digits encased in {} var regex = /\d+(?=\})/g; var nums = text.match(regex); // regex for everything not a digit encased in {} var regex = /[^}]+(?=\{|$)/g; var next_text = text.match(regex); console.log(nums); console.log(next_text);
您可以使用類似的正則表達式並迭代每個匹配項,將每個捕獲的組附加到結果數組,如下所示:
let str = '{3} Lorem ipsum "dolor" sit amet, {2} consectetur adipiscing elit. {5}Sed semper; sollicitudin diam, "posuere" {3}aliquet massa pulvinar nec.'
let regex = /\{(.)\}([^{]+)/g
let match = regex.exec(str)
let arr1 = []
let arr2 = []
while(match != null){
arr1.push(match[1])
arr2.push(match[2])
match = regex.exec(str)
}
console.log(arr1)
console.log(arr2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.