JoJ*_*oJo 67 javascript regex newline
你如何将一段长文本分成不同的行?为什么这会两次返回line1?
/^(.*?)$/mg.exec('line1\r\nline2\r\n');
Run Code Online (Sandbox Code Playgroud)
["line1","line1"]
我打开了多行修改器来匹配^和$匹配行的开头和结尾.我还打开了全局修改器以捕获所有行.
我希望使用正则表达式分割,而不是String.split因为我将处理Linux \n和Windows \r\n行结尾.
Rea*_*ven 128
arrayOfLines = lineString.match(/[^\r\n]+/g);
Run Code Online (Sandbox Code Playgroud)
正如蒂姆所说,这是整个比赛和捕获.regex.exec(string)无论全局修饰符如何,它都会在找到第一场比赛时获得回报,而这些回归是为了string.match(regex)纪念全局.
Tim*_*ker 95
使用
result = subject.split(/\r?\n/);
Run Code Online (Sandbox Code Playgroud)
你的正则表达式返回line1两次,因为它line1是整个匹配和第一个捕获组的内容.
Aru*_*ore 22
我假设以下构成换行符
请用
var re=/\r\n|\n\r|\n|\r/g;
arrayofLines=lineString.replace(re,"\n").split("\n");
Run Code Online (Sandbox Code Playgroud)
对于所有行的数组,包括空行.
要么
请用
arrayOfLines = lineString.match(/[^\r\n]+/g);
Run Code Online (Sandbox Code Playgroud)
对于非空行数组
cis*_*eat 19
甚至更简单的正则表达式处理所有行结束组合,甚至混合在同一个文件中,并删除空行:
var lines = text.split(/[\r\n]+/g);
使用空白修剪:
var lines = text.trim().split(/\s*[\r\n]+\s*/g);
Unicode\xc2\xae 技术标准 #18定义了行边界的构成。该同一部分还提供了一个正则表达式来匹配所有行边界。使用该正则表达式,我们可以定义以下 JS 函数,该函数在任意行边界处分割给定的字符串(保留空行以及前导和尾随空格):
\nconst splitLines = s => s.split(/\\r\\n|(?!\\r\\n)[\\n-\\r\\x85\\u2028\\u2029]/)\nRun Code Online (Sandbox Code Playgroud)\n我不明白为什么负前瞻部分 ( (?!\\r\\n)) 是必要的,但这就是 Unicode 文档 \xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f 中建议的内容。
上述文档建议定义一个正则表达式元字符来匹配所有行结束字符和序列。Perl 就有\\R这样的能力。不幸的是,JavaScript 不包含这样的元字符。唉,我什至找不到相关的 TC39 提案。
首先替换所有\r\n带\n,然后 String.split.