首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的RegExp忽略了字符串的开头和结尾?

为什么我的RegExp忽略了字符串的开头和结尾?
EN

Stack Overflow用户
提问于 2011-07-29 17:47:30
回答 3查看 135关注 0票数 0

我制作了这个辅助函数来查找单个单词,这些单词不是更大表达式的一部分

它适用于任何不是句子中第一个或最后一个单词的单词,为什么呢?

有没有办法将""添加到正则表达式中?

代码语言:javascript
运行
复制
String.prototype.findWord = function(word) {

    var startsWith = /[\[\]\.,-\/#!$%\^&\*;:{}=\-_~()\s]/ ;
    var endsWith = /[^A-Za-z0-9]/ ;

    var wordIndex = this.indexOf(word);

    if (startsWith.test(this.charAt(wordIndex - 1)) &&
        endsWith.test(this.charAt(wordIndex + word.length))) {

        return wordIndex;
    }
    else {return -1;}
}

此外,欢迎对函数本身提出任何改进建议!

更新:示例:我想在字符串中找到单词able,我希望它能在[able] able, #able1等情况下工作。但如果它是另一个词的一部分,如disable, enable等,就不是这样了

EN

回答 3

Stack Overflow用户

发布于 2011-07-29 17:59:15

不同的版本:

代码语言:javascript
运行
复制
String.prototype.findWord = function(word) {
   return this.search(new RegExp("\\b"+word+"\\b"));
}

只有在单词后面匹配endsWith时,您的if才会计算为true。但是一个句子的最后一个单词以句号结尾,这与你的字母数字表达不匹配。

票数 2
EN

Stack Overflow用户

发布于 2011-07-29 17:52:00

你有没有试过单词边界-- \b

还有匹配一个单词字符([a-zA-Z_])的\w --这也可能对您有所帮助(取决于您的单词定义)。

有关更多详细信息,请参阅RegExp docs

票数 1
EN

Stack Overflow用户

发布于 2011-07-29 20:48:58

如果您希望您的endsWith正则表达式也匹配空字符串,则只需将|^$附加到它:

代码语言:javascript
运行
复制
var endsWith = /[^A-Za-z0-9]|^$/ ;

无论如何,使用if (wordIndex == 0)可以很容易地检查它是否是文本的开头,使用if (wordIndex + word.length == this.length)可以轻松地检查它是否是文本的结尾。

也可以通过对输入字符串的副本进行操作来消除此问题,该副本由非字母数字字符包围。例如:

代码语言:javascript
运行
复制
var s = "#" + this + "#"; 
var wordIndex = this.indexOf(word) - 1;

但我担心您的函数还有另一个问题:它永远不会在"disable able enable“这样的字符串中匹配"able”,因为对indexOf的调用将返回3,然后startsWith.test(wordIndex)将返回false,函数将以-1退出,而不进行进一步搜索。

所以你可以试试:

代码语言:javascript
运行
复制
String.prototype.findWord = function (word) {

   var startsWith = "[\\[\\]\\.,-\\/#!$%\\^&\*;:{}=\\-_~()\\s]";
   var endsWith =   "[^A-Za-z0-9]";

   var wordIndex = ("#"+this+"#").search(new RegExp(startsWith + word + endsWith)) - 1;

   if (wordIndex == -1) { return -1; }
   return wordIndex;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6871313

复制
相关文章

相似问题

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