Javascript正则表达式,匹配句子的开头,结束并丢弃其余的?

时间:2017-04-20 12:15:00

标签: javascript regex

如何提取以#开头且以.nr结尾的多个句子。

在这个例子中,只有2个句子符合我的要求。

<textarea id="input" style="width:100%;height:350px;">

name: John Smith
tel. 02222222222.nr   <!-- discard --->

#name: Maria White
tel. 03333333333      <!-- discard --->

#name: Bryan Red
tel. 04444444444.nr   <!-- My Requirements: MATCH --->

#name: Sarah Brown
tel.                  <!-- discard --->

#name: George White
tel. 01111111111      <!-- discard --->

name:
tel. 03333333333.nr   <!-- discard --->

#name: Kelly Preston
tel. 03333333333.nr   <!-- My Requirements: MATCH --->

</textarea>

<p id="output"></p>

<script language="javascript">
var str = document.getElementById("input").value;
var output = str.match(/[#][^\.]*[.nr]+/g);
document.getElementById("output").innerHTML = output;
</script>

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以使用以下正则表达式:

/^#.*\n.*\.nr$/gm

regex101上查看此操作。

它匹配行开头的#,然后是换行符,然后是换行符,然后是行尾的任何字符,包括.nr。它依赖于g lobal标志来匹配您的字符串中的多个结果,以及m ultiline标记,以便^$分别匹配每个字符串的开头和结尾行而不是字符串的开头和结尾。

答案 1 :(得分:1)

/#.*\n.*\.nr/g

    #    : literal '#'
    .*   : a sequence of one or more characters (by default \n is not allowed)
    \n   : a new line
    .*   : ...
    \.nr : literal ".nr"

var text = document.getElementById("input").value;

var matches = text.match(/#.*\n.*\.nr/g);

console.log(matches);
<textarea id="input" style="width:100%;height:350px;">
name: John Smith
tel. 02222222222.nr  

#name: Maria White
tel. 03333333333      

#name: Bryan Red
tel. 04444444444.nr   

#name: Sarah Brown
tel.                  

#name: George White
tel. 01111111111     

name:
tel. 03333333333.nr

#name: Kelly Preston
tel. 03333333333.nr
</textarea>