簡體   English   中英

如何從特殊字符之間提取多個字符串

[英]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:

  1. [3,2,5,3]
  2. ["Lorem ipsum "dolor" sit amet", "consectetur adipiscing elit.", "Sed semper; sollicitudin diam, "posuere"", "aliquet massa pulvinar nec."]

幾乎我做到了,但我對文本中的特殊字符有疑問(輸入文本中禁止使用大括號字符)。 我現在的正則表達式:

\{(.)\}+([\d\w\s]+)

它返回:

  1. [“{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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM