簡體   English   中英

使用正則表達式捕獲`\\“`並拆分成數組

[英]Using regex to capture `\"` and split into array

我接觸過的東西,我以前從未見過的和谷歌是沒有用的,因為它使刪除\\"從我的搜索。

首先,是什么\\"是什么意思?我訪問的API,並在關鍵的價值觀之一,它是標記的字符串,但隨后如果標簽之一有兩個詞,它使用\\" ,以表明該標簽是二話。 以下示例

"foo bar baz \\"taz foo\\" goo too loo"

我試圖把它們分成像這樣的數組["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]

然而,我有一個地獄的時間來弄清楚如何捕獲\\"並制作它,以便我可以將它們分成如上所述的數組。

使用String.prototype。 replace()獲取樂趣和利潤:

var s = "foo bar baz \"taz foo\" goo too loo";

var arr = [];
s.replace(/[^\s"]+|"[^"]*"/g, function($1) {
  arr.push($1.replace(/"/g,''));
});

console.log(arr); // ["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]

創建一個空數組arr以將匹配推送到
使用replace來收集$1匹配:任何東西
[^\\s"]+不是空格或雙引號(一次或無限次)
| 要么
"[^"]*"之間的任何東西" "不是引用[^"] (零或無限次*

\\"意味着逃避雙引號字符。它被稱為轉義字符

如果要在雙引號的字符串中使用double,則必須使用轉義字符。

比如說你想存儲一個字符串abcd"xyz"abcd

console.log("abcd"xyz"abcd");

會給你一個錯誤,因為在xyz之前的雙引號標記字符串的結尾並且在xyz標記新字符串的開頭之后引用,因此由於語法不正確而發生錯誤。

因此,要在字符串中使用雙引號,您必須這樣做

使用\\"轉義雙引號

console.log("abcd\"xyz\"abcd");

或將雙引號放在單引號字符串中

console.log('abcd"xyz"abcd');

至於你的分裂問題,你可以拆分正則表達式來獲得這樣的數組:

> "foo bar baz \"taz foo\" goo too loo".match(/\w+|(?:")[^"]*?(?:")/g);

["foo", "bar", "baz", ""taz foo"", "goo", "too", "loo"]

然后你可以迭代數組並刪除雙引號,如下所示:

> '"abcd xyz"'.replace(/"/g, '');
"abcd xyz"

合並代碼:

> arr="foo bar baz \"taz foo\" goo too loo".match(/\w+|"[^"]*?(?=")/g);
["foo", "bar", "baz", ""taz foo", "goo", "too", "loo"]
> for(var i=0;i<arr.length;i++){arr[i]=arr[i].replace(/"/g, '');}
> console.log(arr);
["foo", "bar", "baz", "taz foo", "goo", "too", "loo"]

暫無
暫無

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

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