首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用全文regex搜索Devanagari文本?

如何使用全文regex搜索Devanagari文本?
EN

Stack Overflow用户
提问于 2014-04-23 06:42:55
回答 4查看 1.8K关注 0票数 5

我的带有Devanagari单词的HTML代码

代码语言:javascript
复制
<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代码

代码语言: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

整个单词搜索应该给出一个答案,但是regexp和XRegExp都让我失望了。我需要些帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-25 07:38:20

代码语言:javascript
复制
regex = XRegExp("(?:^|[^\\p{Devanagari}\\p{L}])मंत्री(?=[^\\p{Devanagari}\\p{L}]|$)");

解决了。特别感谢路易。在最后完成之前,我测试了一个更严格的测试用例。

मंत्रीमंममंत्री。.मंत्रीमंत्री-<मंत्रीमंत्री>मंत्री,,मंत्री,,मंत्री,मंत्री

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-04-23 11:07:00

使用这个regexp,我可以在मंत्री上得到一个匹配,但排除मुख्यमंत्री:

代码语言:javascript
复制
var regex = XRegExp("(?:^|\\P{L})मंत्री(?=\\P{L}|$)");

这样做的是匹配मंत्री,如果它:

  1. 在字符串的开头或前面有一个Unicode认为是非字母的字符,并且
  2. 在字符串的末尾,或者后面跟着Unicode认为是非字母的字符。

请注意,这与\b所做的略有不同,因为\b不匹配数字。例如,/\bmantri\b/不匹配mantri123,因为123被认为是单词的一部分,因此不会标记单词边界。如果您想要类似于\b的东西,那么就会这样做:

代码语言:javascript
复制
var regex = XRegExp("(?:^|[^\\p{L}\\p{N}])मंत्री(?=[^\\p{L}\\p{N}]|$)");

与第一个regexp的不同之处在于,对于这个regexp,मंत्री不能在前面或后面加上一个数字。

我在正则表达式的末尾使用了一个负的前瞻性,所以结果中排除了单词后面的字符。没有等效的负查找,所以如果在मंत्री之前有一个字符,它将出现在结果中。对于特定的应用程序,您必须决定如何处理这个字符。

票数 3
EN

Stack Overflow用户

发布于 2014-04-23 08:21:55

把这个放在小提琴里,看看是否有什么东西能帮你。

代码语言:javascript
复制
alert(fullpage_content);
//match(/मंत्री/g);
alert("मंत्री मुख्यमंत्री".match(/मंत्री/g));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23236767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档