【问题标题】:Javascript search() function give Range out of order in character classJavascript search() 函数在字符类中给出范围乱序
【发布时间】:2021-06-14 13:25:22
【问题描述】:

我使用 in string.search("value") 来搜索字符串。它给出 SyntaxError: Invalid regular expression: /[sanofi-aventis]/: Range out of order in character class。下面是我的代码和截图。

var str = "[sanofi-aventis]";
var res = str.search("[sanofi-aventis]");

【问题讨论】:

  • String.prototype.search() 需要正则表达式作为参数,而不是子字符串。为什么需要.search()
  • 我想从名称(例如“[sanofi-aventis]”)中搜索值(例如“[sanofi-aventis]”)
  • 在这种情况下“搜索”是什么意思?字符串中是否存在子字符串?如果是这样:How to check whether a string contains a substring in JavaScript?
  • @Ivar 感谢您的回复..但以下是正确答案和 search() 的替代品
  • 我认为这很正常,因为[sanofi-aventis] 不是一个好的正则表达式。

标签: javascript


【解决方案1】:

这是因为String.prototype.search 只接受正则表达式作为参数,而不接受字符串。您提供的字符串是无效的正则表达式。如果您想找到它存在,那么只需使用String.prototype.indexOf()String.prototype.includes

var str = "[sanofi-aventis]";

// If value is not -1 then substring exists
console.log(str.indexOf("[sanofi-aventis]") !== -1);  // true
console.log(str.indexOf("foo bar") !== -1);  // false

// Uses ES6 String.prototype.includes, which returns a boolean
console.log(str.includes("[sanofi-aventis]"));  // true
console.log(str.includes("foo bar"));  // false

关于为什么[sanofi-aventis] 会引发范围错误的更多信息:这是因为它被解释为正则表达式模式,而i-a 部分会引发错误,因为两个方括号之间的破折号表示a character range。由于i在字符集中出现在a之后,所以它是无效的。

您会意识到[sanofa-iventis] 不会抛出错误,因为a-i 是一个有效的字符范围。但是,在 String.prototype.search 中使用它不会产生您预期的结果。

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 2015-05-15
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多