如何使用全字正则表达式搜索梵文文本?

时间:2014-04-23 06:42:55

标签: javascript regex unicode hindi xregexp

我使用梵文单词的HTML代码

<html>
<head>
<title>TODO</title>
<meta charset="UTF-8">
</head>
<body>
    मंत्री मुख्यमंत्री 
</body>
    <script src="jquery-1.11.0.min.js"></script>
    <script src="xregexp_20.js"></script>
    <script src="addons/unicode/unicode-base.js"></script>
    <script src="addons/unicode/unicode-scripts.js"></script>
    <script src="my.js"></script>
</html>

我的javascript代码

var html = document.getElementsByTagName("html")[0];
var fullpage_content = html.innerHTML;

var regex = RegExp("मंत्री", "g");
var count = fullpage_content.match(regex);
console.log("count in page : " + count+ ", " + count.length);

//use of word boundry ,not supported by devanagari characters
regex = RegExp("\\bमंत्री\\b", "g");
count = fullpage_content.match(regex);
console.log("count in page : " + count);

regex = XRegExp("मंत्री");
var match = XRegExp.matchChain(fullpage_content, [regex]);
console.log("count in page : " + match + ", " + match.length);

//xregex do not support word boundry \\b
regex = XRegExp("\\bमंत्री\\b");
match = XRegExp.matchChain(fullpage_content, [regex]);
console.log("count in page : " + match + ", " + match.length);

输出js(在Chrome上)

  

页数:मंत्री,मंत्री,2

     

在页面中计数:null

     

页数:मंत्री,मंत्री,2

     

在页面中计数:,0

全字搜索应该给出一个答案,但正则表达式和XRegExp都失败了。我需要一些帮助。

4 个答案:

答案 0 :(得分:3)

使用此正则表达式我可以在मंत्री上获得匹配但排除मुख्यमंत्री:

var regex = XRegExp("(?:^|\\P{L})मंत्री(?=\\P{L}|$)");

这样做符合मंत्री如果:

  1. 位于字符串的开头或前面是Unicode认为非字母的字符,

  2. 位于字符串的末尾,或后跟Unicode认为是非字母的字符。

  3. 请注意,这与\b略有不同,因为\b与数字不匹配。例如,/\bmantri\b/mantri123不匹配,因为123被视为单词的一部分,因此不会标记单词边界。如果你想要一些模仿\b的东西,那么就可以这样做:

    var regex = XRegExp("(?:^|[^\\p{L}\\p{N}])मंत्री(?=[^\\p{L}\\p{N}]|$)");
    

    与第一个正则表达式的不同之处在于,使用这个मंत्री不能在数字之前或之后。

    我在正则表达式的末尾使用了负向前瞻,因此从结果中排除了单词后面的字符。没有等效的负面看法,所以如果在मंत्री之前有一个角色,那么出现在结果中。您必须根据具体应用来决定要对此角色做什么。

答案 1 :(得分:1)

regex = XRegExp("(?:^|[^\\p{Devanagari}\\p{L}])मंत्री(?=[^\\p{Devanagari}\\p{L}]|$)");

解决了它。特别感谢路易斯。 在最终确定之前,我测试了一个更严格的测试用例。

这是一个不错的选择。 .मंत्रीमंत्री-&lt;मंत्रीमंत्री&gt; मंत्री,,मंत्री,मंत्री,मंत्री,मंत्री,,मंत्री,मंत्री,

मंत्री,मंत्री

मंत्री,मंत्रीमंत्रीमुख्यमंत्री

答案 2 :(得分:0)

将它添加到小提琴中并检查是否有什么东西可以帮助你

alert(fullpage_content);
//match(/मंत्री/g);
alert("मंत्री मुख्यमंत्री".match(/मंत्री/g));

答案 3 :(得分:0)

如果您假设每个单词后跟一个或多个空格作为字符中断,则遵循js正则表达式将为您提供正确的结果

console.log("count inline without xRegExp:" + "मंत्री मुख्यमंत्री".match(/मंत्री\s+/g));