Javascript Regex Catch Word

时间:2016-04-26 14:06:30

标签: javascript regex

我想在章节中听到。由于unicode字符(şöüİıçğ)问题,我不想使用单词边界。所以我使用这样的正则表达式。我收到一个错误无效的组。有人可以提供帮助吗?

var paragraphy= "Bu örnek bir metindir <span>bu</span> metin; test amaçlı yazılmıştır.";
var word="metin;";
var regex = new RegExp("([\\s>]|^)("+word+")(?=([\\.\\,\\;\\?\\!](?=[\\s<])|(?<![\\.\\,\\;\\?\\!])[<\\s]|$))", "gi");
console.log(paragraphy.match(regex));

我想要这个结果:[“metin”]

2 个答案:

答案 0 :(得分:1)

您可以在单词之前使用([\\s>]|^)组简化边界检查,并在(?=[.,;?!\\s<])之后查找。此外,由于您使用的是全局标志,并且您定义了捕获组,并且需要在匹配后访问一个,因此最好在循环内使用RegExp#exec()

此外,如果你之后有一些标点符号(在搜索词内),你应该首先摆脱它。如果它只出现在单词末尾的,请使用word = word.replace(/[,.;?!<]+$/, '')进行预处理。

var paragraphy = "Bu örnek bir metindir <span>bu</span> metin; test amaçlı yazılmıştır.";
var word="metin;";
var regex = new RegExp("([\\s>]|^)("+word.replace(/[,.;?!<]+$/, '')+")(?=[.,;?!\\s<])", "gi");
res = paragraphy.replace(regex, '$1<span>metin</span>');
document.body.innerHTML = "<pre>" + res + "</pre>";
span {
  color: #FF0000;
  }

答案 1 :(得分:1)

根据上面的讨论(您的问题下方),您可以使用此replace

    var word = "metin";

    var re = new RegExp("(^|[\\s>])(" + word + ")[.,;?!]?(?=[\\s<]|$)", "gi");

    var str = 'Bu örnek bir metindir <span>bu</span> metin; test amaçlı yazılmıştır';
     
    var result = str.replace(re, '$1<span>$2</span>');

    alert(result);

//=> Bu örnek bir metindir <span>bu</span> <span>metin</span> test amaçlı yazılmıştır

RegEx Demo