te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Why we are using _ in this expression str.replace([W_]g, '').toLowerCase(); We could have used [W]g
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Why we are using _ in this expression str.replace([W_]g, '').toLowerCase(); We could have used [W]g

programmeradmin5浏览0评论

It is a javascript question.I was solving palindromes question on freecodecamp.Let me write the full code here:

 function palindrome(str) {
 var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase();
 var reverseStr = normalizedStr.split('').reverse().join('');
  return normalizedStr === reverseStr;
 }

It is a javascript question.I was solving palindromes question on freecodecamp.Let me write the full code here:

 function palindrome(str) {
 var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase();
 var reverseStr = normalizedStr.split('').reverse().join('');
  return normalizedStr === reverseStr;
 }
Share Improve this question asked Oct 30, 2015 at 13:10 Uzma KhanUzma Khan 1391 gold badge4 silver badges14 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 7

The \W metacharacter is used to find a non-word character. A word character is a character from a-z, A-Z, 0-9, including the underscore character. This means that if you use [\W] and not [\W_]

var normalizedStr = str.replace(/[\W]/g, '').toLowerCase();

your normalizedStr will still contain underscore after the replacement.

Because this challenge requires the removal of all non-alphanumeric characters (punctuation, spaces and symbols), it will return unwanted results for any processed strings that include "_":

palindrome("_eye") -- should return true, but it will be false instead;

palindrome("0_0 (: /-\ :) 0-0") -- should return true, but will be false instead;

Also, instead of converting the string to array, reverse it and convert it back to string before parison, better use a for loop to pare the arrays for much better performance (especially if the string is bigger):

function palindrome(str) {
  var clearString = str.toLowerCase().replace(/[^0-9a-z]/gi, '').split('');
  
  for (var i = 0; i < clearString.length/2; i++) {
    if (clearString[i] !== clearString[clearString.length -1 -i]) {  
      return false;
    } 
  }
  return true;
}

Keep in mind that the false statement should be first and the true statement must be outside the for loop, otherwise it will break the function after the first match and return inaccurate result.

Benchmark snippet here:

const stringLength = 100000;  // < < ADJUST THE STRING LENGTH HERE

const string = superString(stringLength);

console.log(`Random string length: ${string.length} symbols`);

benchMark(arraySplitReverseJoinMethod);
benchMark(forLoopComparisonMethod);

function arraySplitReverseJoinMethod(str) {
  return str == str.split('').reverse().join('');
}

function forLoopComparisonMethod(str) {
  let string = str.split('');
  
  for (var i = 0; i < string.length/2; i++) {
    if (string[i] !== string[string.length -1 -i]) {  
      return false;
    } 
  }

  return true;
}

function benchMark(func) {
  const start = +new Date();

  func(string);

  const end = +new Date();
  const total = end - start;

  console.log(`${func.name}: ${total} ms`);

  return `${func.name}: ${total} ms`;
}

function superString(n) {
  let superString = '';

  for (let i = 0; i < n; i++) {
    const randomString = Math.random().toString(36).substring(2, 12);

    superString = superString.concat(randomString);
  }

  return superString;
}

\W match any non-word character [^a-zA-Z0-9_]

_ the literal character _

so this regex will keep in your string only letters and numbers

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论