当前位置: 首页 > 面试题库 >

JavaScript的String.indexOf()是否有允许正则表达式的版本?

商璞
2023-03-14
问题内容

在javascript中,是否有等效的String.indexOf()接受正则表达式而不是第一个第一个参数的字符串,同时仍允许第二个参数?

我需要做类似的事情

str.indexOf(/[abc]/ , i);

str.lastIndexOf(/[abc]/ , i);

虽然String.search()将regexp作为参数,但不允许我指定第二个参数!

编辑:
事实证明,这比我原来想的要难,所以我编写了一个小的测试函数来测试所有提供的解决方案…假定regexIndexOf和regexLastIndexOf已添加到String对象。

function test (str) {
    var i = str.length +2;
    while (i--) {
        if (str.indexOf('a',i) != str.regexIndexOf(/a/,i)) 
            alert (['failed regexIndexOf ' , str,i , str.indexOf('a',i) , str.regexIndexOf(/a/,i)]) ;
        if (str.lastIndexOf('a',i) != str.regexLastIndexOf(/a/,i) ) 
            alert (['failed regexLastIndexOf ' , str,i,str.lastIndexOf('a',i) , str.regexLastIndexOf(/a/,i)]) ;
    }
}

我正在测试以确保至少对于一个字符正则表达式,其结果与我们使用indexOf相同

//在xes
test(’xxx’)中寻找a ;
测试(’axx’);
测试(’xax’);
测试(’xxa’);
测试(’axa’);
测试(’xaa’);
测试(’aax’);
测试(’aaa’);


问题答案:

结合已经提到的一些方法(indexOf显然相当简单),我认为这些功能可以解决问题:

String.prototype.regexIndexOf = function(regex, startpos) {
    var indexOf = this.substring(startpos || 0).search(regex);
    return (indexOf >= 0) ? (indexOf + (startpos || 0)) : indexOf;
}

String.prototype.regexLastIndexOf = function(regex, startpos) {
    regex = (regex.global) ? regex : new RegExp(regex.source, "g" + (regex.ignoreCase ? "i" : "") + (regex.multiLine ? "m" : ""));
    if(typeof (startpos) == "undefined") {
        startpos = this.length;
    } else if(startpos < 0) {
        startpos = 0;
    }
    var stringToWorkWith = this.substring(0, startpos + 1);
    var lastIndexOf = -1;
    var nextStop = 0;
    while((result = regex.exec(stringToWorkWith)) != null) {
        lastIndexOf = result.index;
        regex.lastIndex = ++nextStop;
    }
    return lastIndexOf;
}

显然,修改内置的String对象将对大多数人发出危险信号,但这可能不是什么大问题了。只需意识到这一点。

更新:编辑,regexLastIndexOf()以便lastIndexOf()现在看起来像。请让我知道它是否仍然失败以及在什么情况下。

更新:通过此页面上的评论以及我自己的所有测试。当然,这并不意味着它是防弹的。任何反馈表示赞赏。



 类似资料:
  • 我想验证只包含Select查询的字符串。不管怎么说,还是要这么做的??查询

  • 我有以下模式来验证字符串 但在这里,它也不接受两个字符串之间的空间。有人能告诉我在上面的模式中我必须做什么改变,以便在两个字符串之间留出空间吗?但是字符串的开头和结尾不应该允许有空格。

  • 我有一个带两个可能输出的字符串,它将被<代码>

  • 问题内容: 允许数字和点的正则表达式是什么?关于\D这只允许数字,但不允许一个点,我需要它允许数字和一个点,这是一个浮点值,当我在中执行函数时需要有效,但我需要的只是正则表达式那只允许我需要它允许的。 这将是JavaScriptreplace函数的本机语言,用于删除非数字和其他符号(点除外)。 问题答案: 如果您想允许1和1.2: 如果您希望允许,和: 如果只允许1.2(仅浮动): \d允许位数(

  • 我有一个表单,它有一个输入字段,只要求一个有效的youtube url,没有逗号分隔的youtube url。我使用以下正则表达式验证youtube url的用户输入: 但如果用户输入逗号分隔的有效youtube链接,这些正则表达式就会失败。 我想要一个正则表达式,simpy只允许在输入字段中有一个有效的youtube链接。有人能在这方面帮我吗,因为我对regex还不熟悉? 例如: https:/

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?