Javascript 返回包含匹配单词的行及其后的行,并按降序列出

Javascript 返回包含匹配单词的行及其后的行,并按降序列出,javascript,regex,Javascript,Regex,我需要的是JavaScript方面的帮助,而不是Powershell。下面我在Powershell中的示例仅用于演示 我想在Javascript中实现的是返回包含匹配单词banana的行和它后面的行,最后按降序列出 示例输入数据: $input = Get-Content -Path $inputRaw | Select-String -Pattern "banana (.*)" -Context 0,1 $input | Group-Object -Property Nam

我需要的是
JavaScript
方面的帮助,而不是
Powershell
。下面我在
Powershell
中的示例仅用于演示

我想在
Javascript
中实现的是返回包含匹配单词banana的行和它后面的行,最后按降序列出

示例输入数据:

$input = Get-Content -Path $inputRaw | Select-String -Pattern "banana (.*)" -Context 0,1
$input | Group-Object -Property Name | Sort-Object -Property Name | ForEach-Object {$_.Group | Sort-Object} > $output
2018-01-01产品:苹果一些文字

2018-01-01价格:欧元1部分文字

2018-01-02产品:香蕉一些文字

2018-01-02价格:欧元3部分文本

2018-01-03产品:橙色部分文字

2018-01-03价格:4欧元部分文本

2018-01-04产品:香蕉一些文字

2018-01-04价格:欧元1部分文字

这在Powershell中适用于我:

$input = Get-Content -Path $inputRaw | Select-String -Pattern "banana (.*)" -Context 0,1
$input | Group-Object -Property Name | Sort-Object -Property Name | ForEach-Object {$_.Group | Sort-Object} > $output
变量输出的结果应为:

$input = Get-Content -Path $inputRaw | Select-String -Pattern "banana (.*)" -Context 0,1
$input | Group-Object -Property Name | Sort-Object -Property Name | ForEach-Object {$_.Group | Sort-Object} > $output
2018-01-02产品:香蕉一些文字

2018-01-02价格:欧元3部分文本

2018-01-04产品:香蕉一些文字

2018-01-04价格:欧元1部分文字

您可以使用来创建一个新的项目数组,方法是查找带有
的行和后面的行,然后将它们推到新数组中

const input=`2018-01-01产品:苹果一些文本
2018-01-01价格:欧元1部分文字
2018-01-02产品:香蕉一些文字
2018-01-02价格:欧元3部分文本
2018-01-03产品:橙色部分文字
2018-01-03价格:4欧元部分文本
2018-01-04产品:香蕉一些文字
2018-01-04价格:欧元1部分文字
2018-01-04产品:苹果一些文字
2018-01-04价格:欧元1部分文字
2018-01-04产品:梨一些文字
2018-01-04价格:欧元1部分文字`;
函数查找(文本,…单词){
返回text.split(/\r\n |\n/).reduce((arr、val、idx、orig)=>{
返回单词。一些(w=>val.includes(w))?arr.concat(orig[idx],orig[idx+1]):arr
}, [])
}
document.querySelector('textarea')。value=find(输入'Banana','Orange')。join('\n')
console.log(查找(输入'Pear'))

您可以使用此正则表达式创建纯正则表达式解决方案:

/(^.*?Banana.*\n)(.*?$)/gm
它将第一句与“Banana”和该行的其余部分匹配,然后添加下一行

如果需要,可以在索引
'1'
'2'
处绘制每一行

这样使用它(假设您的字符串名为
'text'
):

编辑

要使用变量而不是硬编码“banana”,您可以使用正则表达式的字符串构造函数(假设您的变量名为
'fruit'

var  match = text.match(/(^.*?Banana.*\n)(.*?$)/gm);
var firstPart = match[1];
var secondPart = match[2];
var regex =new RegExp('(^.*?' + fruit + '.*\\n)(.*?$)','gm');

您好,谢谢!这似乎工作正常。但我不确定如何将其传递给变量,而不是在控制台中显示它。我希望结果存储在变量输出中,并在文本框中显示该内容,如下所示:textarea.value=output;
document.getElementById('my-textarea')。value=find('Orange')
是否可以同时将两者(橙色和香蕉)组合在一起?例如,.value('Orange'|'Banana'),这样我就可以将所有结果都放在同一个数组中?是的,您可以在代码下面看到我的更新代码和我的编辑注释。这将返回一个数组,因此您不必使用
split()
,除非您使用
toString()
在拆分之前。您应该只需要使用
join()
。如果您以html格式输出,请使用
join(“
”)
,但是如果您插入到
中,则
\n
很好。谢谢Poul,这看起来很有趣,我会尝试一下!:)