簡體   English   中英

Javascript 正則表達式在文本被引號包圍時用新行拆分字符串

[英]Javascript regex split a string with new lines when text is surrounded by quotes

我想在引用文本時使用split字符串方法拆分字符串。 例如,我想要這個字符串:

Some text  

"This is what
I want to catch"

Some more text

變成一個字符串數組如:

0: "Some text"
1: "This is what↵I want to catch"
2: "↵↵Some more text"

為此,我呼吁:

inputText.split(/"((.+)|\s)+"/)

這不起作用,因為它創建了數組:

0: "Some text"
1: "I want to catch"
2: "I want to catch"
3: "↵↵Some more text"

知道如何實現我想要的嗎?

我不能使用后視和前瞻,因為我仍然希望引號成為匹配的一部分。 我的目標是在文本被引號包圍時拆分字符串,但數組中沒有引號本身。

根據需要,您可以在split中使用此正則表達式:

/\n*(?:"([^"\\]*(?:\\.[^"\\]*)*)")?\n+/

正則表達式解釋:

  • \n* : 匹配 0+ 換行符
  • (?: : 啟動非捕獲組
    • " : 比賽開場"
    • ( : 開始捕獲組
      • [^"\\]* : 匹配 0+ 任何不是"和不是\的字符
      • (?:\\.[^"\\]*)* :匹配一個轉義字符,后跟 0+ 任何不是"和不是\的字符。 重復此組 0 次或多次
    • ) : 結束捕獲組 #1
    • " : 比賽結束"
  • )? :結束非捕獲組。 ? 使該組可選
  • \n+ : 匹配 1+ 換行符

代碼:

 const s = `Some text "This is what I want to catch" Some more text` var m = s.split(/\n*(?:"([^"\\]*(?:\\.[^"\\]*)*)")?\n+/) console.log(m)


或者,您可以在 Javascript 中使用此正則表達式來匹配允許 escaping 引用的字符串:

/"[^"\\]*(?:\\.[^"\\]*)*"|[^"\n]+/g

正則表達式演示

正則表達式解釋:

  • " : 比賽開場"
  • [^"\\]* : 匹配 0+ 任何不是"和不是\的字符
  • (?:\\.[^"\\]*)* :匹配一個轉義字符,后跟 0+ 任何不是"和不是\的字符。 重復此組 0 次或多次
  • " : 比賽結束"
  • | : 或者
  • [^"\n] : 匹配沒有換行符或"的其他行

代碼:

 const s = `Some text "This is what I want to catch" Some more text` var m = s.match(/"[^"\\]*(?:\\.[^"\\]*)*"|[^"\n]+/g) console.log(m)

您可以簡單地拆分" 。您還可以截斷前導和尾隨的換行符。

 const s = `Some text "This is what I want to catch" Some more text` console.log(s.split('"'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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