我应该用空格(或\ r \ n \ t)分割一个可能包含子串的字符串
示例:
text 'contained in' a string
我尝试使用正则表达式:
/[?<!\"\'](\ )*[?!\"\']/g;
string.split(regex)应返回:
["text", "'contained in'", "a", "string"]
但是这是错的......我在很长时间内解决它:@
现在,我创建了一个split函数,如果有超出子串的话,会自动用sepchar分割,但是我正在寻找一个带正则表达式的简单解决方案,如果可能的话,显然:P
答案 0 :(得分:2)
尝试/([\'\"][^\"\']+[\'\"])|([^\s]+)/g
,简单但工作正常。
您只能使用/([\'\"][^\"\']+[\'\"])/g
提取子字符串。
答案 1 :(得分:1)
看起来你尝试使用这样的外观:
/(?<!\"\')(\ )*(?!\"\')/
但是,JavaScript不支持lookbehinds((?<=...)
或(?<!...)
),因此您需要一个不同的策略。您要拆分的模式中的任何捕获组都将在结果数组中返回,因此像这样拆分将使您接近所需的结果:
var input = "text 'contained in' a string";
var output = input.split(/('[^']*')|\s/);
console.log(output); // ["text", undefined, "", "'contained in'", "", undefined, "a", undefined, "string"]
现在唯一的问题是你对那些undefined
和空字符串做了什么?您可以使用ES5中的filter
方法,如下所示:
var input = "text 'contained in' a string";
var output = input.split(/('[^']*')|\s/).filter(function(s) { return s && s.length; });
console.log(output); // ["text", "'contained in'", "a", "string"]
答案 2 :(得分:1)
你可以这样做:
(?:'(.*)'|(\b[\w]+\b))
工作正则表达式示例:
甚至更好,而不是使用单词bounderies(因为你的字符串可能包含特殊字符)..这会更好:
(?:'(.*?)'|(?:[\s]*|^)([^\s]+)(?:[\s]*|$))
示例字符串:
text 'contained in' a string-with special's chars.
匹配
"text", "contained in", "a", "string-with", "special's", "chars."
工作正则表达式示例:
答案 3 :(得分:1)
您可以在Javascript中使用它:
var s="text 'contained in' a string";
s.split(/ +(?=(?:(?:[^']*'){2})*[^']*$)/g);
//=> ["text", "'contained in'", "a", "string"]
Regex基本上使用前瞻来确保空格后面有偶数引号。