javascript 中的正则表达式回顾
regex lookbehind in javascript
我正在尝试匹配文本中的一些单词
工作示例(我想要的)regex101:
regex = /(?<![a-z])word/g
text = word 1word !word aword
只有前三个词会被匹配,这是我想要实现的。
但是后面的样子在 javascript 中不起作用:(
所以现在我正在尝试这个 regex101:
regex = /(\b|\B)word/g
text = word 1word !word aword
但所有单词都会匹配,并且它们前面不能有其他字母,只能有整数或特殊字符。
如果我只使用较小的“\b”,则 1word 将不匹配,如果我只使用“\B”,则 !word 将不匹配
编辑
输出应该是 ["word","word","word"]
还有第 1 个!不能包含在比赛中也不能在另一个组中,这是因为 我想将它与 javascript 一起使用 .replace(regex,function(match){}) which不应循环遍历 1 和 !
代码我用它来
for(var i = 0; i < elements.length; i++){
text = elements[i].innerHTML;
textnew = text.replace(regexp,function(match){
matched = getCrosslink(match)[0];
return "<a href='"+matched.url+"'>"+match+"</a>";
});
elements[i].innerHTML = textnew;
}
您可以使用以下正则表达式
([^a-zA-Z]|\b)(word)
只需像
一样使用replace
var str = "word 1word !word aword";
str.replace(/([^a-zA-Z]|\b)(word)/g,""+"<a></a>");
捕获主角
如果不查看更多输出示例,很难确切地知道您想要什么,但是寻找以边界 开头或 以非字母开头的两者如何呢?例如:
(\bword|[^a-zA-Z]word)
输出:['word', '1word', '!word']
仅捕获 "word"
如果您只想捕获 "word" 部分,您可以使用以下命令并获取第二个捕获组:
(\b|[^a-zA-Z])(word)
输出:['word', 'word', 'word']
用replace()
您可以在定义替换值时使用特定的捕获组,因此这对您有用(其中 "new"
是您要使用的词):
var regex = /(\b|[^a-zA-Z])(word)/g;
var text = "word 1word !word aword";
text = text.replace(regex, "" + "new");
输出:"new 1new !new aword"
如果您在替换中使用专用函数,试试这个:
textnew = text.replace(regexp,function (allMatch, match1, match2){
matched = getCrosslink(match2)[0];
return "<a href='"+matched.url+"'>"+match2+"</a>";
});
我正在尝试匹配文本中的一些单词
工作示例(我想要的)regex101:
regex = /(?<![a-z])word/g
text = word 1word !word aword
只有前三个词会被匹配,这是我想要实现的。 但是后面的样子在 javascript 中不起作用:(
所以现在我正在尝试这个 regex101:
regex = /(\b|\B)word/g
text = word 1word !word aword
但所有单词都会匹配,并且它们前面不能有其他字母,只能有整数或特殊字符。 如果我只使用较小的“\b”,则 1word 将不匹配,如果我只使用“\B”,则 !word 将不匹配
编辑
输出应该是 ["word","word","word"]
还有第 1 个!不能包含在比赛中也不能在另一个组中,这是因为 我想将它与 javascript 一起使用 .replace(regex,function(match){}) which不应循环遍历 1 和 !
代码我用它来
for(var i = 0; i < elements.length; i++){
text = elements[i].innerHTML;
textnew = text.replace(regexp,function(match){
matched = getCrosslink(match)[0];
return "<a href='"+matched.url+"'>"+match+"</a>";
});
elements[i].innerHTML = textnew;
}
您可以使用以下正则表达式
([^a-zA-Z]|\b)(word)
只需像
一样使用replace
var str = "word 1word !word aword";
str.replace(/([^a-zA-Z]|\b)(word)/g,""+"<a></a>");
捕获主角
如果不查看更多输出示例,很难确切地知道您想要什么,但是寻找以边界 开头或 以非字母开头的两者如何呢?例如:
(\bword|[^a-zA-Z]word)
输出:['word', '1word', '!word']
仅捕获 "word"
如果您只想捕获 "word" 部分,您可以使用以下命令并获取第二个捕获组:
(\b|[^a-zA-Z])(word)
输出:['word', 'word', 'word']
用replace()
您可以在定义替换值时使用特定的捕获组,因此这对您有用(其中 "new"
是您要使用的词):
var regex = /(\b|[^a-zA-Z])(word)/g;
var text = "word 1word !word aword";
text = text.replace(regex, "" + "new");
输出:"new 1new !new aword"
如果您在替换中使用专用函数,试试这个:
textnew = text.replace(regexp,function (allMatch, match1, match2){
matched = getCrosslink(match2)[0];
return "<a href='"+matched.url+"'>"+match2+"</a>";
});