正则表达式变量,仅匹配字母字符

时间:2014-11-22 01:05:48

标签: javascript regex

我有这个无效的javascript:

function test(id) {
    if (id.match('^(.+?)#')) {
        alert(RegExp.$1);   
    }
}

test('test#f');   // should alert 'test'
test('tes4t#f');  // should not alert

http://jsfiddle.net/r7mky2y9/1/

我只想匹配a-zA-Z之前出现的#个字符。我尝试调整正则表达式,因此它是(.+?)[a-zA-Z],但我有一种不正确的感觉。

4 个答案:

答案 0 :(得分:2)

这是你的正则表达式101:

var m = id.match(/^([a-zA-Z]+)#/);
if (m) alert(m[1]);

在Javascript中,正则表达式是在斜杠之间定义的。

此外,懒惰量词在这里没用。我没有测试过表演,但应该没有任何区别。

最后,利用match的返回值,它返回带有完整mathed表达式的数组,然后是捕获的组。

答案 1 :(得分:1)

试试这个:

function test(id) {
  var rmatch = /^([a-zA-Z]+?)#/;
  var match = id.match(rmatch);
  if (match) {
    alert(match[1]);
  }
}

说明:

function test(id) {
  var rmatch = /^([a-zA-Z]+?)#/; // This constructs a regex, notice it is NOT a string literal
  // Gets the match followed by the various capture groups, or null if no match was found
  var match = id.match(rmatch);
  if (match) {
    // match[1] is the first capture group, alert that
    alert(match[1]);
  }
}

答案 2 :(得分:0)

使用if(id.match(/^([a-zA-Z]+)#/))

更新了我的答案,因为match需要一个正则表达式参数,而不是一个字符串。

此外,id.match(/^([A-z]+)#/)因某种原因与^test匹配。为什么呢?

答案 3 :(得分:0)

试试这个:

function test(id) {
  var regex = /([a-z]+)#/i,
      group = regex.exec(id);
  if (group && group[1]) {
    alert(group[1]);
  }
}

它表示捕获(用parens)一组一个或多个字母([az] +),然后是散列,并使匹配不区分大小写(因为最后的i)。