我的模式在第一场比赛后停止,并且在那里有全局比赛。
//When I add [*]* like var pattern=/([^A-z0-9]|^|[*]*)_(\S.*?)_((?!\S)|\W)/g;
// it works, but when I try to match "1_test1_" and "a_test1_" it matches "_test1_"
// which I don't want. I know [*]* will match 0 or more instances of literal *
// but [*]+ won't work due to the first match being "_test1_*"
var pattern=/([^A-z0-9]|^)_(\S.*?)_((?!\S)|\W)/g;
alert("_test1_*_test2_".match(pattern)); //=> _test1_*
//This should match "_test1_*" first then it should also add to the array with "_test2_"
问题开始
我希望上面的(第一个代码块)提醒“_test1 _ *,_ test2_” 我希望下面的(第二个代码块)保持不变(如commentend部分所示)。
我不知道为什么_test2_不匹配,因为它与下面显示的测试完全匹配。
问题结束
以下是测试并按预期工作。
alert("_test1_ _test2_".match(pattern)); //=> _test1_, _test2_
alert("_test1_*".match(pattern)); //=> _test1_*
alert("_test2_".match(pattern)); //=> _test2_
alert("*_test2_".match(pattern)); //=> *_test2_
alert("1_test1_".match(pattern)); //=> null
alert("a_test1_".match(pattern)); //=> null
alert("_test1_1".match(pattern)); //=> null
alert("_test1_a".match(pattern)); //=> null
答案 0 :(得分:0)
我认为模式应该改变。这个怎么样?在您想要下划线之前的可选符号字符的部分后面添加一个问号:
([^A-z0-9]|^)?_(\S.*?)_((?!\S)|\W)
答案 1 :(得分:0)
好吧那么如何使用这个序列,如果你正在寻找它,那就不知道了:
([^A-z0-9]|^|)_(\S.*?)_((?!\S)|\W)
我刚刚在正则表达式中的字符串开头符号之后添加了一个额外的垂直线,正在测试你的非工作情况并且有效。
BTW,我使用regexpal.com测试正则表达式。
答案 2 :(得分:0)
经过多次尝试和错误尝试后,我终于通过添加| \ b找到了答案。感谢@Alih Nehpets回答我的问题。
([^A-z0-9]|^|\b)_(\S.*?)_((?!\S)|\W)