正则表达式在javascript中看起来

时间:2015-10-13 13:06:01

标签: javascript regex lookbehind

我想尝试匹配文本中的一些单词

工作示例(我想要的)regex101

regex = /(?<![a-z])word/g
text = word 1word !word aword

只会匹配前三个单词,这就是我想要达到的目标。 但是背后的外观在javascript中不起作用:(

所以现在我试试这个regex101

regex = /(\b|\B)word/g
text = word 1word !word aword

但是所有单词都会匹配,并且它们之前可能没有其他字母,只有整数或特殊字符。 如果我只使用较小的&#34; \ b&#34;如果我只使用&#34; \ B&#34;那么1word将不会匹配。 !字不匹配

修改

输出应为[&#34; word&#34;,&#34; word&#34;,&#34; word&#34;]

和1!不能包含在匹配中,也不能包含在另一个组中,这是因为我想将它与javascript .replace(正则表达式,函数(匹配){})一起使用,它不应该遍历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;
}

2 个答案:

答案 0 :(得分:2)

捕获主角

如果没有看到更多的输出示例,很难确切地知道你想要什么,但是寻找以border 开头的内容以非字母开头。像这样举例如:

(\bword|[^a-zA-Z]word)

输出:['word', '1word', '!word']

Here is a working example

仅捕获“字”

如果您只想捕获“单词”部分,可以使用以下内容并获取第二个捕获组:

(\b|[^a-zA-Z])(word)

输出:['word', 'word', 'word']

Here is a working example

使用replace()

您可以在定义替换值时使用特定的捕获组,因此这适用于您("new"是您要使用的单词):

var regex = /(\b|[^a-zA-Z])(word)/g;
var text = "word 1word !word aword";

text = text.replace(regex, "$1" + "new");

输出:"new 1new !new aword"

Here is a working example

如果您在替换中使用专用功能,请尝试以下方法:

textnew = text.replace(regexp,function (allMatch, match1, match2){
    matched = getCrosslink(match2)[0];
    return "<a href='"+matched.url+"'>"+match2+"</a>";
});

Here is a working example

答案 1 :(得分:1)

您可以使用以下正则表达式

([^a-zA-Z]|\b)(word)

只需使用replace,如

var str = "word 1word !word aword";
str.replace(/([^a-zA-Z]|\b)(word)/g,"$1"+"<a>$2</a>");

Regex