繁体   English   中英

使用正则表达式从JavaScript中获取URL字符串的值

[英]get value from URL string in JavaScript with regex

我想从JavaScript中的URL字符串中获取特定的水果值。 我想要的水果是苹果,梨,白梨,香蕉和香蕉巴西。

我应该得到的url值是:

www.ourfruit.net/fruit/apple_is_healthy.html (value: apple)
www.ourfruit.net/fruit/pear_is_healthy.html (value: pear)
www.ourfruit.net/fruit_offer/white_pear_discount.html (value: white-pear)
www.ourfruit.net/fruit_offer/banana_love.html (value: banana)
www.ourfruit.net/fruit_export/banana_brazil_export.html (value: banana-brazil)

url的值我不应该得到的是:

www.ourfruit.net/fruit/red_apple_is_healthy.html

www.ourfruit.net/fruit_offer/green_banana_love.html

www.ourfruit.net/fruit_export/banana_brazil_yellow_quality_export.html

我的尝试基于这个解决方案正则表达式在输入中的任何地方找到两个字符串

function findFruits() {
    var url_path = window.location.pathname;
    var url_path = url_path.replace(/\//g, "_");
    var url_path = url_path.replace("_", "");
    var url_path = url_path.replace("_index.html", "");
    if (-1 !== url_path.match(/^.*apple.*$/)) theFruit = "fruit_apple";
    if (-1 !== url_path.match(/^.*pear.*$/)) theFruit = "fruit_pear";
    if (-1 !== url_path.match(/^.*white.*pear.*$/)) theFruit = "fruit_white_pear";
    if (-1 !== url_path.match(/^.*banana.*$/)) theFruit = "fruit_banana";
    if (-1 !== url_path.match(/^.*banana.*brazil.*$/)) theFruit = "fruit_banana_brazil";
    tagData.tagValue.push({ 
            "tags": [{ "tag": "FRUIT_POPULATE", "value": theFruit }], 
            "isEvent": true, 
            "isTargeting": true })
    }
jQuery(document).ready(function() { 
    findFruits(); 
});

它确实有效。 问题是甚至在另一个页面中,控制台仅显示最后一个if语句的结果。 所以在这种情况下结果FRUIT_POPULATE:fruit_banana_brazil。 如果我将最后一个if语句位置更改为另一个水果,则控制台仍然显示最后一个if语句的值。

问题:如何从上面匹配的url字符串中显示正确的theFruit值?

谢谢

String.prototype.match()返回null ,当它无法匹配给定的正则表达式时, -1 !== null始终为true。 尝试与null比较而不是-1 此外, else if块,则不使用else if ,因此字符串将遍历每个if语句。


实际上,您可以在不使用任何正则表达式的情况下执行此操作,因为您的模式并不困难。 String.prototype.includes允许您检查字符串是否具有给定的子字符串。

function findFruits() {
  var url = window.location.pathname
  var theFruit = null

  if (url.includes('/apple_')) {
    theFruit = 'fruit_apple'
  } else if (url.includes('/pear_')) {
    theFruit = 'fruit_pear'
  } else if (url.includes('white_pear')) {
    theFruit = 'fruit_white_pear'
  } else if (url.includes('/banana_')) {
    theFruit = 'fruit_banana'
  } else if (url.includes('/banana_brazil_')) {
    theFruit = 'fruit_banana_brazil'
  }

  // ...
}

如果你只想匹配水果在/字符后面的情况,那么在水果之前添加它以相应地限制匹配。 (注意,如果你想使用正则表达式,那么你需要用反斜杠转义正斜杠: /^.*\\/apple_.*$/ \\/ /^.*\\/apple_.*$/

还有String.prototype.startsWithString.prototype.endsWith可以根据测试字符串是否匹配字符串的开头或结尾灵活查询javascript字符串。

 var getParams = function (url) { var params = {}; var parser = document.createElement('a'); parser.href = url; var query = parser.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); params[pair[0]] = decodeURIComponent(pair[1]); } return params; }; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM