为什么不修剪子串和&不捕获工作?

时间:2015-11-04 21:54:54

标签: javascript

我正在尝试捕获以下html文本区域的中间行:

function RunClean() 
	{
        var input = document.getElementById('input').value;
        var input = input.replace(/(\r\n|\n|\r)/gm,"");
       	var input = input.replace(/\s\s+/g, ' ');
        var string =  input.match("In the Matter of(.|\n)*Respondent");
       var parties = string.slice(16, -10);
    	alert(parties);	
	}
<form>
    <textarea id="input" rows="4" cols="50">
        In the Matter of
        Name I. Want,
        Respondent.
    </textarea>
    <button onclick="RunClean()">Clean</button>
</form>

出于某种原因,这不会起作用。它什么都不返回。出了什么问题,我怎么能通过使用正则表达式非捕获组来实现这个结果?

2 个答案:

答案 0 :(得分:1)

您的代码对于这样简单的任务来说太复杂了

function RunClean() 
{
    alert(document.getElementById('input').value.split('\n')[1].trim());
}

答案 1 :(得分:1)

如果您想匹配换行符(/\n/),则可能不应删除它们。

  

出了什么问题[...]?

  • input.match(...)不返回字符串。它返回一个字符串数组。
  • 您的小组会捕获单个字符(任意正常字符(/./)或换行符(/\n/)),而不是一系列字符。 (*的重复在组外)
  

[...]如何使用正则表达式非捕获组来实现此结果?

使您现有的群组成为非捕获群体并围绕重复放置捕获群组:

var input = document.getElementById('input').value;
var input = input.replace(/\s\s+/g, ' ');
var matches =  input.match(/In the Matter of((?:.|\n)*)Respondent/);
var parties = matches[1];
alert(parties); 

function RunClean() 
	{
        var input = document.getElementById('input').value;
        var input = input.replace(/\s\s+/g, ' ');
        var matches =  input.match(/In the Matter of((?:.|\n)*)Respondent/);
        var parties = matches[1];
    	alert(parties);	
	}
<form>
    <textarea id="input" rows="4" cols="50">
        In the Matter of
        Name I. Want,
        Respondent.
    </textarea>
    <button onclick="RunClean()">Clean</button>
</form>

尽管你删除了所有空格,但根本不需要内部的非捕获组:

var input = document.getElementById('input').value;
var input = input.replace(/(\r\n|\n|\r)/gm,"");
var input = input.replace(/\s\s+/g, ' ');
var matches =  input.match("In the Matter of(.*)Respondent");
var parties = matches[1];
alert(parties);

function RunClean() 
	{
        var input = document.getElementById('input').value;
        var input = input.replace(/(\r\n|\n|\r)/gm,"");
       	var input = input.replace(/\s\s+/g, ' ');
        var matches =  input.match("In the Matter of(.*)Respondent");
        var parties = matches[1];
    	alert(parties);	
	}
<form>
    <textarea id="input" rows="4" cols="50">
        In the Matter of
        Name I. Want,
        Respondent.
    </textarea>
    <button onclick="RunClean()">Clean</button>
</form>