仅在没有数字时捕获行

时间:2014-05-08 21:01:36

标签: javascript regex

基本上我试图在Javascript中编写一个查找某个字符串的正则表达式,但如果该字符串包含数字,我不希望它匹配。这很难解释,所以exmaple会更好。

字符串:
Blah等等等等 Blah 233 blah

匹配:Blah blah blah
不匹配:Blah 233 blah

我已经尝试过消极的前瞻,以及让其发挥作用的其他方法,但由于我对正则表达式缺乏经验,因此我无法理解它是如何工作的。

2 个答案:

答案 0 :(得分:2)

您可以使用以下表达式匹配每一行:

var re = /^\D*$/mg,
line;

while ((line = re.exec(str)) !== null) {
  console.log(line);
}

Demo

表达式匹配一行,其中所有字符都不是数字; /m修饰符使^$分别匹配每行的开头和结尾(与整个主题相对)。

答案 1 :(得分:0)

就够了:

js> s = "ao123eu";
"ao123eu"
js> if (s.match(/\d/) === null) { print("has no number"); } else { print("has number") }
has number

js> s = "aoeu";
"aoeu"
js> if (s.match(/\d/) === null) { print("has no number"); } else { print("has number") }
has no number

所有我正在做的,是在\d匹配字符串中恰好出现一次的任何数字。

你可以把它变成一个功能:

function has_number(s) {
    return s.match(/\d/) !== null;
}

如果字符串中有数字,则返回true。

现在,如果你想进行替换,你可以这样做:

function remove_numbers(s) {
    return s.replace(/\d+/g, "\\_o<")
}

给出:

js> print(remove_numbers("ao234u 42 ao1234eu"))
ao\_o<u \_o< ao\_o<eu