我有这个无效的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]
,但我有一种不正确的感觉。
答案 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)。