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